ROOT logo
#include "honlinehistarray.h"
#include "TMath.h"
#include "TLine.h"
#include "TStyle.h"
#include "TPostScript.h"
#include "TROOT.h"
ClassImp(HOnlineNamedLegend)
ClassImp(HOnlineLegendDrawer)
ClassImp(HOnlineTrendArray)
ClassImp(HOnlineHistArray)
ClassImp(HOnlineHistArray2)

HOnlineNamedLegend::HOnlineNamedLegend (const Char_t* name,
			    const Char_t* title,HOnlineMonHistAddon* h)
    :TNamed(name,title)
{
    if(h)
    {
	Int_t s1,s2;
	TString temp;
      
	legend=new TLegend(0.8,0.8,0.89,0.89);

	legend->SetFillStyle(0);
        legend->SetFillColor(19);
        legend->SetLineColor(1);
        legend->SetLineStyle(1);
        legend->SetDrawOption("lego");

	if(strcmp(h->ClassName(),"HOnlineHistArray")==0)
	{
            ((HOnlineHistArray*)h)->getDim(&s1,&s2);
	    for(Int_t i=0;i<s1;i++){
		for(Int_t j=0;j<s2;j++){
		    if(s1>1){sprintf((Char_t*)temp.Data()," %i %i",i,j);}
		    else {sprintf((Char_t*)temp.Data()," %i",j);}
                    TH1* myhist=((TH1*)(((HOnlineHistArray*)h)->getP(i,j)));
		    legend->AddEntry(myhist,temp.Data(),"l");
		}
	    }

	}
	else if(strcmp(h->ClassName(),"HOnlineTrendArray")==0)
	{
	    ((HOnlineTrendArray*)h)->getDim(&s1,&s2);
	    for(Int_t i=0;i<s1;i++){
		for(Int_t j=0;j<s2;j++){
		    if(s1>1){sprintf((Char_t*)temp.Data(),"%i %i",i,j);}
		    else {sprintf((Char_t*)temp.Data(),"%i",j);}
		    TH1* myhist=((TH1*)(((HOnlineTrendArray*)h)->getP(i,j)));
		    legend->AddEntry(myhist,temp.Data(),"l");
		}
	    }
	}
    }
}
HOnlineNamedLegend::~HOnlineNamedLegend()
{
    if(legend)delete legend;
}

//###########################################################

HOnlineLegendDrawer::HOnlineLegendDrawer(const Char_t* name,
			     const Char_t* title)
    :TNamed(name,title)
{
   array=new TObjArray();
}
HOnlineLegendDrawer::~HOnlineLegendDrawer()
{
    if(array)array->Delete();
}
void HOnlineLegendDrawer::draw(HOnlineMonHistAddon* h)
{
    if(strcmp(h->ClassName(),"HOnlineHistArray")==0 || strcmp(h->ClassName(),"HOnlineTrendArray")==0 )
    {
        TString strname;
	strname="Leg";
	strname+=h->GetName();
	HOnlineNamedLegend* myleg=((HOnlineNamedLegend*)(array->FindObject(strname.Data())));
	if(myleg)
	{
	    ((TLegend*) (((HOnlineNamedLegend*)myleg)->getP()))->Draw("same");
	}
	else
	{
 	    myleg =add(h);
	    ((TLegend*) (((HOnlineNamedLegend*)myleg)->getP()))->Draw("same");
	}
    }
}
HOnlineNamedLegend* HOnlineLegendDrawer::add (HOnlineMonHistAddon* h)
{
    TString strname;
    strname="Leg";
    strname+=h->GetName();

    HOnlineNamedLegend* myleg=new HOnlineNamedLegend(strname.Data(),h->GetTitle(),h);
    array->AddLast(myleg);
    return (HOnlineNamedLegend*)myleg;
}

//###################################################################################


HOnlineTrendArray::HOnlineTrendArray(const Char_t* name,
			 const Char_t* title,
			 Int_t active,Int_t resetable,Int_t size1,Int_t size2,
			 Int_t nbinsX,Float_t xlo,Float_t xup)
    :HOnlineMonHistAddon (name,title,active,resetable,nbinsX,xlo,xup,0,0.F,0.F)
{
    setSize1(size1);
    setSize2(size2);
    array=0;
}
HOnlineTrendArray::HOnlineTrendArray(HOnlineMonHistAddon& add)
{
    copySet(add);
    array=0;
    create();
}
void    HOnlineTrendArray::create()
{
    if(getActive()==1)
    {
	Bool_t doLegend = kFALSE;
	Bool_t useFormat= kFALSE;
        Int_t  dim      = 0 ;
	if(legxmax != -1){
             doLegend = kTRUE;
             legend = new TLegend(legxmin,legymin,legxmax,legymax,"","brNDC");
	     if(legform != "no" && legform.Contains("%i")){

		Int_t ntimes = legform.CountChar('%');
		if(ntimes == 1 && arraySize1 == 1)                   { useFormat = kTRUE; dim = 1;}
	        if(ntimes == 2 && arraySize1 > 1 && arraySize2 > 1)  { useFormat = kTRUE; dim = 2;}
	     }
	}

	array = new TObjArray((arraySize1*arraySize2)+1);
	Char_t namehist[400];
	for(Int_t i=0;i<arraySize1;i++){
	    for(Int_t j=0;j<arraySize2;j++){
		sprintf(namehist,"%s%s%i%s%i%s",this->GetName(),"_[",i,"][",j,"]");
		if(HistType.CompareTo("1S")==0)array->AddAt(new TH1S(namehist,this->GetTitle(),nBinsX,Xlo,Xup),i*arraySize2+j);
                if(HistType.CompareTo("1F")==0)array->AddAt(new TH1F(namehist,this->GetTitle(),nBinsX,Xlo,Xup),i*arraySize2+j);
                if(HistType.CompareTo("1D")==0)array->AddAt(new TH1D(namehist,this->GetTitle(),nBinsX,Xlo,Xup),i*arraySize2+j);
                ((TH1*)((*array)[i*arraySize2+j]))->SetDirectory(0);
		setHist((TH1*)((*array)[i*arraySize2+j]));
		if(doLegend)
		{
		    if(!useFormat) legend ->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form("%s",((TH1*)((*array)[i*arraySize2+j]))->GetName()),"lpf");
		    else {
			if(dim==1) legend->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form(legform.Data(),j  ),"lpf");
			if(dim==2) legend->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form(legform.Data(),i,j),"lpf");
		    }
		}
	    }
	}
    	sprintf(namehist,"%s%s",this->GetName(),"_dummy");
	array->AddAt(new TH1S(namehist,this->GetTitle(),2,Xlo,Xup),(arraySize1*arraySize2));
	((TH1*)((*array)[arraySize1*arraySize2]))->SetDirectory(0);
	setHist((TH1*)((*array)[arraySize1*arraySize2]));

        

    }
}
void    HOnlineTrendArray::drawAll( Bool_t allowHiddenZero,Double_t minSet,Double_t maxSet)
{
    if(getActive()==1)
    {
	Bool_t useSet = kFALSE;
        if(minSet > -1e199 && maxSet < 1e199 ) useSet = kTRUE;

	Float_t* maxvalues=new Float_t [(arraySize1*arraySize2)];
	Float_t* minvalues=new Float_t [(arraySize1*arraySize2)];
        TH1* htemp;
	for(Int_t i=0;i<(arraySize1*arraySize2);i++){
            htemp=((TH1*)((*array)[i]));
	    maxvalues[i]=htemp->GetBinContent(htemp->GetMaximumBin());
	    minvalues[i]=htemp->GetBinContent(htemp->GetMinimumBin());
	}

	Int_t   loc =TMath::LocMax((arraySize1*arraySize2),maxvalues);
	Int_t   loc1=TMath::LocMin((arraySize1*arraySize2),minvalues);

        Float_t MAX,MIN;
	if(max==-99){
	     MAX=maxvalues[loc]*1.1;
	} else MAX=max;

	if(min==-99){
	    if(logY==0)MIN=minvalues[loc1];
	    else MIN=maxvalues[loc]*0.001;
	} else MIN=min;

	htemp=((TH1*)((*array)[arraySize1*arraySize2]));

	TString opt=htemp->GetOption();

	if(!drawSame){
	    if(allowHiddenZero!=0 || logY!=0 ) { htemp->SetMinimum(MIN);   }
	    else                               { htemp->SetMinimum(-1111); }

	    if(!useSet) htemp->SetMaximum(MAX);
	    else        {
		htemp->SetMinimum(1.1*minSet);
		htemp->SetMaximum(1.1*maxSet);
	    }
	    
	    if(opt.CompareTo("")==0)htemp->Draw();
	    else if(opt.CompareTo("p")==0)htemp->Draw("p");
	    else if(opt.CompareTo("pl")==0)htemp->Draw("pl");
	}

	for(Int_t i=0;i<(arraySize1*arraySize2);i++){
 	    htemp=((TH1*)((*array)[i]));
	    if(opt.CompareTo("")==0)htemp->Draw("same");
	    else if(opt.CompareTo("p")==0) htemp->Draw("psame");
	    else if(opt.CompareTo("pl")==0)htemp->Draw("plsame");
	}
	delete [] maxvalues;
	delete [] minvalues;

        if(legend && !drawSame) legend->Draw();

    }
}
void    HOnlineTrendArray::fill(Int_t s,Int_t m,Stat_t a, Stat_t b)
{
    if(array)
    {
	TH1* h=((TH1F*) (*array)[s*arraySize2+m]);
	for(Int_t i=0;i<getNBinsX();i++){h->SetBinContent(i,h->GetBinContent(i+1) );}
	h->SetBinContent(h->GetNbinsX(),a);
	//h->SetBinError(h->GetNbinsX(),b);
    }else Error("HOnlineTrendArray::fill()","ARRAY DOES NOT EXISI!");
}
void    HOnlineTrendArray::reset(Int_t level,Int_t count)
{
    switch (level)
    {
    case 0:   if(array){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH1*)(*array)[i])->Reset();}}
    break;
    case 1:   if(array&&getResetable()==1){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH1*)(*array)[i])->Reset();}}
    break;
    case 2:   if(array&&getResetable()==1 && count%getRefreshRate()==0 && count>0){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH1*)(*array)[i])->Reset();}}
    break;
    default : Error("HOnlineTrendArray::reset","UNKNOWN ARGUMENT: Level= %i !",level);
    }
}
void    HOnlineTrendArray::add(HOnlineMonHistAddon* h)
{
    if(array)
    {
	for(Int_t i=0;i<arraySize1;i++){
	    for(Int_t j=0;j<arraySize2;j++){
		((TH1*)((*array)[i*arraySize2+j]))->Add((TH1*)(((HOnlineHistArray*)h)->getP(i,j)));
	    }
	}
    }
    else Error("HOnlineTrendArray::add()","ARRAY DOES NOT EXISI!");
}
void    HOnlineTrendArray::draw( Bool_t allowHiddenZero)
{
   drawAll(allowHiddenZero);
}

void  HOnlineTrendArray::getMinMax(Double_t& min,Double_t& max)
{
    min =  1e200;
    max = -1e200;
    for(Int_t n =0 ; n < array->GetSize(); n++){
	TH1* h = (TH1*)array->At(n);
	if(!h) continue;
	for(Int_t i = 0; i < h->GetNbinsX(); i++ ) {
	    Double_t val = h->GetBinContent(i+1);
	    if(val < min) min = val;
	    if(val > max) max = val;

	}
    }
}

HOnlineTrendArray::~HOnlineTrendArray(){if(array)array->Delete();array=0; if(legend) delete legend;}


//#################################################################################################

HOnlineHistArray::HOnlineHistArray(const Char_t* name,
		       const Char_t* title,
		       Int_t active,Int_t resetable,Int_t size1,Int_t size2,
		       Int_t nbinsX,Float_t xlo,Float_t xup)
:HOnlineMonHistAddon (name,title,active,resetable,nbinsX,xlo,xup,0,0.F,0.F)
{
    setSize1(size1);
    setSize2(size2);
    array=0;
}
HOnlineHistArray::HOnlineHistArray(HOnlineMonHistAddon& add)
{
    copySet(add);
    array=0;
    create();
}
void    HOnlineHistArray::create()
{
    if(getActive()==1)
    {
	Bool_t doLegend = kFALSE;
	Bool_t useFormat= kFALSE;
        Int_t  dim      = 0 ;
	if(legxmax != -1){
             doLegend = kTRUE;
             legend = new TLegend(legxmin,legymin,legxmax,legymax,"","brNDC");
	     if(legform != "no" && legform.Contains("%i")){

		Int_t ntimes = legform.CountChar('%');
		if(ntimes == 1 && arraySize1 == 1)                   { useFormat = kTRUE; dim = 1;}
	        if(ntimes == 2 && arraySize1 > 1 && arraySize2 > 1)  { useFormat = kTRUE; dim = 2;}
	     }
	}

	array = new TObjArray((arraySize1*arraySize2)+1);
	Char_t namehist[400];
	for(Int_t i=0;i<arraySize1;i++){
	    for(Int_t j=0;j<arraySize2;j++){
		sprintf(namehist,"%s%s%i%s%i%s",this->GetName(),"_[",i,"][",j,"]");
		if(HistType.CompareTo("1S")==0)array->AddAt(new TH1S(namehist,this->GetTitle(),nBinsX,Xlo,Xup),i*arraySize2+j);
                if(HistType.CompareTo("1F")==0)array->AddAt(new TH1F(namehist,this->GetTitle(),nBinsX,Xlo,Xup),i*arraySize2+j);
                if(HistType.CompareTo("1D")==0)array->AddAt(new TH1D(namehist,this->GetTitle(),nBinsX,Xlo,Xup),i*arraySize2+j);
                ((TH1*)((*array)[i*arraySize2+j]))->SetDirectory(0);
		setHist((TH1*)((*array)[i*arraySize2+j]));
		if(doLegend)
		{
		    if(!useFormat) legend ->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form("%s",((TH1*)((*array)[i*arraySize2+j]))->GetName()),"lpf");
		    else {
			if(dim==1) legend->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form(legform.Data(),j  ),"lpf");
			if(dim==2) legend->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form(legform.Data(),i,j),"lpf");
		    }
		}
	    }
	}
	sprintf(namehist,"%s%s",this->GetName(),"_dummy");
	array->AddAt(new TH1S(namehist,this->GetTitle(),nBinsX,Xlo,Xup),(arraySize1*arraySize2));
	((TH1*)((*array)[arraySize1*arraySize2]))->SetDirectory(0);
	setHist((TH1*)((*array)[arraySize1*arraySize2]));
    }
}
void    HOnlineHistArray::drawAll(Bool_t allowHiddenZero , Double_t minSet,Double_t maxSet)
{
    if(getActive()==1)
    {
	Bool_t useSet = kFALSE;
        if(minSet > -1e199 && maxSet < 1e199 ) useSet = kTRUE;

	Float_t* maxvalues=new Float_t [(arraySize1*arraySize2)];
	Float_t* minvalues=new Float_t [(arraySize1*arraySize2)];
        TH1* htemp;
	for(Int_t i=0;i<(arraySize1*arraySize2);i++){
            htemp=((TH1*)((*array)[i]));
	    maxvalues[i]=htemp->GetBinContent(htemp->GetMaximumBin());
	    minvalues[i]=htemp->GetBinContent(htemp->GetMinimumBin());
	}

	Int_t   loc =TMath::LocMax((arraySize1*arraySize2),maxvalues);
	Int_t   loc1=TMath::LocMin((arraySize1*arraySize2),minvalues);

        Float_t MAX,MIN;
	if(max==-99){
	     MAX=maxvalues[loc]*1.1;
	} else MAX=max;
	if(min==-99){
	    if(logY==0)MIN=minvalues[loc1];
	    else MIN=maxvalues[loc]*0.001;
	} else MIN=min;

	htemp=((TH1*)((*array)[arraySize1*arraySize2]));

	TString opt=htemp->GetOption();

	if(!drawSame){
	    if(allowHiddenZero!=0 || logY!=0 ) { htemp->SetMinimum(MIN);   }
	    else                               { htemp->SetMinimum(-1111); }
            if(!useSet) htemp->SetMaximum(MAX);
	    else        {
		htemp->SetMinimum(1.1*minSet);
		htemp->SetMaximum(1.1*maxSet);
	    }
	    if(opt.CompareTo("")==0)       htemp->Draw();
	    else if(opt.CompareTo("p")==0) htemp->Draw("p");
	    else if(opt.CompareTo("pl")==0)htemp->Draw("pl");
	}

	for(Int_t i=0;i<(arraySize1*arraySize2);i++){
 	    htemp=((TH1*)((*array)[i]));
	    if(opt.CompareTo("")==0)       htemp->Draw("same");
	    else if(opt.CompareTo("p")==0) htemp->Draw("psame");
	    else if(opt.CompareTo("pl")==0)htemp->Draw("plsame");
	}
	delete [] maxvalues;
	delete [] minvalues;

        if(legend && !drawSame) legend->Draw();
    }
}
void    HOnlineHistArray::fill(Int_t s,Int_t m,Stat_t a,Stat_t b){((TH1F*) (*array)[s*arraySize2+m])->Fill(a);}
void    HOnlineHistArray::setBinContent(Int_t s,Int_t m,Int_t Nbin,Stat_t a){((TH1*) (*array)[s*arraySize2+m])->SetBinContent(Nbin,a);}
Stat_t  HOnlineHistArray::getBinContent(Int_t s,Int_t m,Int_t Nbin)          {return ((TH1*) (*array)[s*arraySize2+m])->GetBinContent(Nbin);}
void    HOnlineHistArray::setBinError(Int_t s,Int_t m,Int_t Nbin,Stat_t a)  {((TH1*) (*array)[s*arraySize2+m])->SetBinError(Nbin,a);}
Stat_t  HOnlineHistArray::getBinError(Int_t s,Int_t m,Int_t Nbin)            {return ((TH1*) (*array)[s*arraySize2+m])->GetBinError(Nbin);}
void    HOnlineHistArray::reset(Int_t level,Int_t count)
{
    switch (level)
    {
    case 0:   if(array){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH1*)(*array)[i])->Reset();}}
    break;
    case 1:   if(array&&getResetable()==1){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH1*)(*array)[i])->Reset();}}
    break;
    case 2:   if(array&&getResetable()==1 && count%getRefreshRate()==0 && count>0){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH1*)(*array)[i])->Reset();}}
    break;
    default : Error("HOnlineHistArray::reset","UNKNOWN ARGUMENT: Level= %i !",level);
    }
}
void    HOnlineHistArray::add(HOnlineMonHistAddon* h)
{
    if(array)
    {
	for(Int_t i=0;i<arraySize1;i++){
	    for(Int_t j=0;j<arraySize2;j++){
		((TH1*)((*array)[i*arraySize2+j]))->Add((TH1*)(((HOnlineHistArray*)h)->getP(i,j)));
	    }
	}
    }
    else Error("HOnlineHistArray::add()","ARRAY DOES NOT EXISI!");
}
void    HOnlineHistArray::draw( Bool_t allowHiddenZero)
{
    drawAll(allowHiddenZero);
}

void  HOnlineHistArray::getMinMax(Double_t& min,Double_t& max)
{
    min =  1e200;
    max = -1e200;
    for(Int_t n =0 ; n < array->GetSize(); n++){
	TH1* h = (TH1*)array->At(n);
	if(!h) continue;
	for(Int_t i = 0; i < h->GetNbinsX(); i++ ) {
	    Double_t val = h->GetBinContent(i+1);
	    if(val < min) min = val;
	    if(val > max) max = val;

	}
    }
}


HOnlineHistArray::~HOnlineHistArray(){if(array)array->Delete();array=0; if(legend) delete legend;}

//############################################################################################################


HOnlineHistArray2::HOnlineHistArray2(const Char_t* name,
			 const Char_t* title,
			 Int_t active,Int_t resetable,Int_t size1,Int_t size2,
			 Int_t nbinsX,Float_t xlo,Float_t xup)
:HOnlineMonHistAddon (name,title,active,resetable,nbinsX,xlo,xup,0,0.F,0.F)
{
    setSize1(size1);
    setSize2(size2);
    array=0;
}
HOnlineHistArray2::HOnlineHistArray2(HOnlineMonHistAddon& add)
{
    copySet(add);
    array=0;
    create();
}
void    HOnlineHistArray2::create()
{
    if(getActive()==1)
    {

	Bool_t doLegend = kFALSE;
	Bool_t useFormat= kFALSE;
        Int_t  dim      = 0 ;
	if(legxmax != -1){
             doLegend = kTRUE;
             legend = new TLegend(legxmin,legymin,legxmax,legymax,"","brNDC");
	     if(legform != "no" && legform.Contains("%i")){

		Int_t ntimes = legform.CountChar('%');
		if(ntimes == 1 && arraySize1 == 1)                   { useFormat = kTRUE; dim = 1;}
	        if(ntimes == 2 && arraySize1 > 1 && arraySize2 > 1)  { useFormat = kTRUE; dim = 2;}
	     }
	}

	array = new TObjArray((arraySize1*arraySize2)+1);
	Char_t namehist[400];
	for(Int_t i=0;i<arraySize1;i++){
	    for(Int_t j=0;j<arraySize2;j++){
		sprintf(namehist,"%s%s%i%s%i%s",this->GetName(),"_[",i,"][",j,"]");
		if(HistType.CompareTo("2S")==0)array->AddAt(new TH2S(namehist,this->GetTitle(),nBinsX,Xlo,Xup,nBinsY,Ylo,Yup),i*arraySize2+j);
                if(HistType.CompareTo("2F")==0)array->AddAt(new TH2F(namehist,this->GetTitle(),nBinsX,Xlo,Xup,nBinsY,Ylo,Yup),i*arraySize2+j);
                if(HistType.CompareTo("2D")==0)array->AddAt(new TH2D(namehist,this->GetTitle(),nBinsX,Xlo,Xup,nBinsY,Ylo,Yup),i*arraySize2+j);
                ((TH2*)((*array)[i*arraySize2+j]))->SetDirectory(0);
		setHist((TH2*)((*array)[i*arraySize2+j]));
		if(doLegend)
		{
		    if(!useFormat) legend ->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form("%s",((TH1*)((*array)[i*arraySize2+j]))->GetName()),"lpf");
		    else {
			if(dim==1) legend->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form(legform.Data(),j  ),"lpf");
			if(dim==2) legend->AddEntry(((TH1*)((*array)[i*arraySize2+j])),Form(legform.Data(),i,j),"lpf");
		    }
		}
	    }
	}
	sprintf(namehist,"%s%s",this->GetName(),"_dummy");
	array->AddAt(new TH2S(namehist,this->GetTitle(),nBinsX,Xlo,Xup,2,Ylo,Yup),(arraySize1*arraySize2));
	((TH2*)((*array)[arraySize1*arraySize2]))->SetDirectory(0);
	setHist((TH2*)((*array)[arraySize1*arraySize2]));
    }
}
void    HOnlineHistArray2::drawAll( Bool_t allowHiddenZero,Double_t minSet,Double_t maxSet)
{

    if(getActive()==1)
    {
	Bool_t useSet = kFALSE;
        if(minSet > -1e199 && maxSet < 1e199 ) useSet = kTRUE;

	Float_t* maxvalues=new Float_t [(arraySize1*arraySize2)];
	Float_t* minvalues=new Float_t [(arraySize1*arraySize2)];
        TH2* htemp;
	for(Int_t i=0;i<(arraySize1*arraySize2);i++){
            htemp=((TH2*)((*array)[i]));
	    maxvalues[i]=htemp->GetBinContent(htemp->GetMaximumBin());
	    minvalues[i]=htemp->GetBinContent(htemp->GetMinimumBin());
	}

	Int_t   loc =TMath::LocMax((arraySize1*arraySize2),maxvalues);
	Int_t   loc1=TMath::LocMin((arraySize1*arraySize2),minvalues);

        Float_t MAX,MIN;
	if(max==-99){
	     MAX=maxvalues[loc]*1.1;
	} else MAX=max;
	if(min==-99){
	    if(logY==0)MIN=minvalues[loc1];
	    else MIN=maxvalues[loc]*0.001;
	} else MIN=min;

	htemp=((TH2*)((*array)[arraySize1*arraySize2]));

	if(!drawSame){

	    if(allowHiddenZero!=0 || logY!=0 ) { htemp->SetMinimum(MIN);   }
	    else                               { htemp->SetMinimum(-1111); }

            if(!useSet) htemp->SetMaximum(MAX);
            else {
		htemp->SetMinimum(1.1*minSet);
		htemp->SetMaximum(1.1*maxSet);
	    }

	    htemp->Draw();

	}

	for(Int_t i=0;i<(arraySize1*arraySize2);i++){
 	    htemp=((TH2*)((*array)[i]));
	    htemp->Draw("same");
	}
	delete [] maxvalues;
	delete [] minvalues;

        if(legend && !drawSame) legend->Draw();
    }
}
void    HOnlineHistArray2::draw( Bool_t allowHiddenZero)
{
    drawAll(allowHiddenZero);
}
void    HOnlineHistArray2::fill(Int_t s,Int_t m,Stat_t a,Stat_t b){((TH2*) (*array)[s*arraySize2+m])->Fill(a,b);}
void    HOnlineHistArray2::setBinContent(Int_t s,Int_t m,Int_t Nbin,Int_t N2bin,Stat_t a){((TH2*) (*array)[s*arraySize2+m])->SetBinContent(Nbin,N2bin,a);}
Stat_t  HOnlineHistArray2::getBinContent(Int_t s,Int_t m,Int_t Nbin,Int_t N2bin)          {return ((TH2*) (*array)[s*arraySize2+m])->GetBinContent(Nbin,N2bin);}
void    HOnlineHistArray2::setBinError(Int_t s,Int_t m,Int_t Nbin,Int_t N2bin,Stat_t a)  {((TH2*) (*array)[s*arraySize2+m])->SetBinError(Nbin,N2bin,a);}
Stat_t  HOnlineHistArray2::getBinError(Int_t s,Int_t m,Int_t Nbin,Int_t N2bin)            {return ((TH2*) (*array)[s*arraySize2+m])->GetBinError(Nbin,N2bin);}
void    HOnlineHistArray2::reset(Int_t level,Int_t count)
{
    switch (level)
    {
    case 0:   if(array){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH2*)(*array)[i])->Reset();}}
    break;
    case 1:   if(array&&getResetable()==1){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH2*)(*array)[i])->Reset();}}
    break;
    case 2:   if(array&&getResetable()==1 && count%getRefreshRate()==0 && count>0){for(Int_t i=0;i<arraySize1*arraySize2;i++){((TH2*)(*array)[i])->Reset();}}
    break;
    default : Error("HOnlineHistArray2::reset","UNKNOWN ARGUMENT: Level= %i !",level);
    }
}
void    HOnlineHistArray2::add(HOnlineMonHistAddon* h)
{
    if(array)
    {
	for(Int_t i=0;i<arraySize1;i++){
	    for(Int_t j=0;j<arraySize2;j++){
		((TH2*)((*array)[i*arraySize2+j]))->Add(((HOnlineHistArray2*)h)->getP(i,j));
	    }
	}
    }
    else Error("HOnlineHistArray2::add()","ARRAY DOES NOT EXISI!");
}

void HOnlineHistArray2::getMinMax(Double_t& min,Double_t& max)
{
    min =  1e200;
    max = -1e200;
    for(Int_t n =0 ; n < array->GetSize(); n++){
	TH2* h = (TH2*)array->At(n);
	if(!h) continue;

	for(Int_t i = 0; i < h->GetNbinsX(); i++ ) {
	    for(Int_t j = 0; j < h->GetNbinsY(); j++ ) {
		Double_t val = h->GetBinContent(i+1,j+1);
		if(val < min) min = val;
		if(val > max) max = val;
	    }
	}
    }
}



HOnlineHistArray2::~HOnlineHistArray2(){if(array)array->Delete();array=0; if(legend) delete legend;}
 honlinehistarray.cc:1
 honlinehistarray.cc:2
 honlinehistarray.cc:3
 honlinehistarray.cc:4
 honlinehistarray.cc:5
 honlinehistarray.cc:6
 honlinehistarray.cc:7
 honlinehistarray.cc:8
 honlinehistarray.cc:9
 honlinehistarray.cc:10
 honlinehistarray.cc:11
 honlinehistarray.cc:12
 honlinehistarray.cc:13
 honlinehistarray.cc:14
 honlinehistarray.cc:15
 honlinehistarray.cc:16
 honlinehistarray.cc:17
 honlinehistarray.cc:18
 honlinehistarray.cc:19
 honlinehistarray.cc:20
 honlinehistarray.cc:21
 honlinehistarray.cc:22
 honlinehistarray.cc:23
 honlinehistarray.cc:24
 honlinehistarray.cc:25
 honlinehistarray.cc:26
 honlinehistarray.cc:27
 honlinehistarray.cc:28
 honlinehistarray.cc:29
 honlinehistarray.cc:30
 honlinehistarray.cc:31
 honlinehistarray.cc:32
 honlinehistarray.cc:33
 honlinehistarray.cc:34
 honlinehistarray.cc:35
 honlinehistarray.cc:36
 honlinehistarray.cc:37
 honlinehistarray.cc:38
 honlinehistarray.cc:39
 honlinehistarray.cc:40
 honlinehistarray.cc:41
 honlinehistarray.cc:42
 honlinehistarray.cc:43
 honlinehistarray.cc:44
 honlinehistarray.cc:45
 honlinehistarray.cc:46
 honlinehistarray.cc:47
 honlinehistarray.cc:48
 honlinehistarray.cc:49
 honlinehistarray.cc:50
 honlinehistarray.cc:51
 honlinehistarray.cc:52
 honlinehistarray.cc:53
 honlinehistarray.cc:54
 honlinehistarray.cc:55
 honlinehistarray.cc:56
 honlinehistarray.cc:57
 honlinehistarray.cc:58
 honlinehistarray.cc:59
 honlinehistarray.cc:60
 honlinehistarray.cc:61
 honlinehistarray.cc:62
 honlinehistarray.cc:63
 honlinehistarray.cc:64
 honlinehistarray.cc:65
 honlinehistarray.cc:66
 honlinehistarray.cc:67
 honlinehistarray.cc:68
 honlinehistarray.cc:69
 honlinehistarray.cc:70
 honlinehistarray.cc:71
 honlinehistarray.cc:72
 honlinehistarray.cc:73
 honlinehistarray.cc:74
 honlinehistarray.cc:75
 honlinehistarray.cc:76
 honlinehistarray.cc:77
 honlinehistarray.cc:78
 honlinehistarray.cc:79
 honlinehistarray.cc:80
 honlinehistarray.cc:81
 honlinehistarray.cc:82
 honlinehistarray.cc:83
 honlinehistarray.cc:84
 honlinehistarray.cc:85
 honlinehistarray.cc:86
 honlinehistarray.cc:87
 honlinehistarray.cc:88
 honlinehistarray.cc:89
 honlinehistarray.cc:90
 honlinehistarray.cc:91
 honlinehistarray.cc:92
 honlinehistarray.cc:93
 honlinehistarray.cc:94
 honlinehistarray.cc:95
 honlinehistarray.cc:96
 honlinehistarray.cc:97
 honlinehistarray.cc:98
 honlinehistarray.cc:99
 honlinehistarray.cc:100
 honlinehistarray.cc:101
 honlinehistarray.cc:102
 honlinehistarray.cc:103
 honlinehistarray.cc:104
 honlinehistarray.cc:105
 honlinehistarray.cc:106
 honlinehistarray.cc:107
 honlinehistarray.cc:108
 honlinehistarray.cc:109
 honlinehistarray.cc:110
 honlinehistarray.cc:111
 honlinehistarray.cc:112
 honlinehistarray.cc:113
 honlinehistarray.cc:114
 honlinehistarray.cc:115
 honlinehistarray.cc:116
 honlinehistarray.cc:117
 honlinehistarray.cc:118
 honlinehistarray.cc:119
 honlinehistarray.cc:120
 honlinehistarray.cc:121
 honlinehistarray.cc:122
 honlinehistarray.cc:123
 honlinehistarray.cc:124
 honlinehistarray.cc:125
 honlinehistarray.cc:126
 honlinehistarray.cc:127
 honlinehistarray.cc:128
 honlinehistarray.cc:129
 honlinehistarray.cc:130
 honlinehistarray.cc:131
 honlinehistarray.cc:132
 honlinehistarray.cc:133
 honlinehistarray.cc:134
 honlinehistarray.cc:135
 honlinehistarray.cc:136
 honlinehistarray.cc:137
 honlinehistarray.cc:138
 honlinehistarray.cc:139
 honlinehistarray.cc:140
 honlinehistarray.cc:141
 honlinehistarray.cc:142
 honlinehistarray.cc:143
 honlinehistarray.cc:144
 honlinehistarray.cc:145
 honlinehistarray.cc:146
 honlinehistarray.cc:147
 honlinehistarray.cc:148
 honlinehistarray.cc:149
 honlinehistarray.cc:150
 honlinehistarray.cc:151
 honlinehistarray.cc:152
 honlinehistarray.cc:153
 honlinehistarray.cc:154
 honlinehistarray.cc:155
 honlinehistarray.cc:156
 honlinehistarray.cc:157
 honlinehistarray.cc:158
 honlinehistarray.cc:159
 honlinehistarray.cc:160
 honlinehistarray.cc:161
 honlinehistarray.cc:162
 honlinehistarray.cc:163
 honlinehistarray.cc:164
 honlinehistarray.cc:165
 honlinehistarray.cc:166
 honlinehistarray.cc:167
 honlinehistarray.cc:168
 honlinehistarray.cc:169
 honlinehistarray.cc:170
 honlinehistarray.cc:171
 honlinehistarray.cc:172
 honlinehistarray.cc:173
 honlinehistarray.cc:174
 honlinehistarray.cc:175
 honlinehistarray.cc:176
 honlinehistarray.cc:177
 honlinehistarray.cc:178
 honlinehistarray.cc:179
 honlinehistarray.cc:180
 honlinehistarray.cc:181
 honlinehistarray.cc:182
 honlinehistarray.cc:183
 honlinehistarray.cc:184
 honlinehistarray.cc:185
 honlinehistarray.cc:186
 honlinehistarray.cc:187
 honlinehistarray.cc:188
 honlinehistarray.cc:189
 honlinehistarray.cc:190
 honlinehistarray.cc:191
 honlinehistarray.cc:192
 honlinehistarray.cc:193
 honlinehistarray.cc:194
 honlinehistarray.cc:195
 honlinehistarray.cc:196
 honlinehistarray.cc:197
 honlinehistarray.cc:198
 honlinehistarray.cc:199
 honlinehistarray.cc:200
 honlinehistarray.cc:201
 honlinehistarray.cc:202
 honlinehistarray.cc:203
 honlinehistarray.cc:204
 honlinehistarray.cc:205
 honlinehistarray.cc:206
 honlinehistarray.cc:207
 honlinehistarray.cc:208
 honlinehistarray.cc:209
 honlinehistarray.cc:210
 honlinehistarray.cc:211
 honlinehistarray.cc:212
 honlinehistarray.cc:213
 honlinehistarray.cc:214
 honlinehistarray.cc:215
 honlinehistarray.cc:216
 honlinehistarray.cc:217
 honlinehistarray.cc:218
 honlinehistarray.cc:219
 honlinehistarray.cc:220
 honlinehistarray.cc:221
 honlinehistarray.cc:222
 honlinehistarray.cc:223
 honlinehistarray.cc:224
 honlinehistarray.cc:225
 honlinehistarray.cc:226
 honlinehistarray.cc:227
 honlinehistarray.cc:228
 honlinehistarray.cc:229
 honlinehistarray.cc:230
 honlinehistarray.cc:231
 honlinehistarray.cc:232
 honlinehistarray.cc:233
 honlinehistarray.cc:234
 honlinehistarray.cc:235
 honlinehistarray.cc:236
 honlinehistarray.cc:237
 honlinehistarray.cc:238
 honlinehistarray.cc:239
 honlinehistarray.cc:240
 honlinehistarray.cc:241
 honlinehistarray.cc:242
 honlinehistarray.cc:243
 honlinehistarray.cc:244
 honlinehistarray.cc:245
 honlinehistarray.cc:246
 honlinehistarray.cc:247
 honlinehistarray.cc:248
 honlinehistarray.cc:249
 honlinehistarray.cc:250
 honlinehistarray.cc:251
 honlinehistarray.cc:252
 honlinehistarray.cc:253
 honlinehistarray.cc:254
 honlinehistarray.cc:255
 honlinehistarray.cc:256
 honlinehistarray.cc:257
 honlinehistarray.cc:258
 honlinehistarray.cc:259
 honlinehistarray.cc:260
 honlinehistarray.cc:261
 honlinehistarray.cc:262
 honlinehistarray.cc:263
 honlinehistarray.cc:264
 honlinehistarray.cc:265
 honlinehistarray.cc:266
 honlinehistarray.cc:267
 honlinehistarray.cc:268
 honlinehistarray.cc:269
 honlinehistarray.cc:270
 honlinehistarray.cc:271
 honlinehistarray.cc:272
 honlinehistarray.cc:273
 honlinehistarray.cc:274
 honlinehistarray.cc:275
 honlinehistarray.cc:276
 honlinehistarray.cc:277
 honlinehistarray.cc:278
 honlinehistarray.cc:279
 honlinehistarray.cc:280
 honlinehistarray.cc:281
 honlinehistarray.cc:282
 honlinehistarray.cc:283
 honlinehistarray.cc:284
 honlinehistarray.cc:285
 honlinehistarray.cc:286
 honlinehistarray.cc:287
 honlinehistarray.cc:288
 honlinehistarray.cc:289
 honlinehistarray.cc:290
 honlinehistarray.cc:291
 honlinehistarray.cc:292
 honlinehistarray.cc:293
 honlinehistarray.cc:294
 honlinehistarray.cc:295
 honlinehistarray.cc:296
 honlinehistarray.cc:297
 honlinehistarray.cc:298
 honlinehistarray.cc:299
 honlinehistarray.cc:300
 honlinehistarray.cc:301
 honlinehistarray.cc:302
 honlinehistarray.cc:303
 honlinehistarray.cc:304
 honlinehistarray.cc:305
 honlinehistarray.cc:306
 honlinehistarray.cc:307
 honlinehistarray.cc:308
 honlinehistarray.cc:309
 honlinehistarray.cc:310
 honlinehistarray.cc:311
 honlinehistarray.cc:312
 honlinehistarray.cc:313
 honlinehistarray.cc:314
 honlinehistarray.cc:315
 honlinehistarray.cc:316
 honlinehistarray.cc:317
 honlinehistarray.cc:318
 honlinehistarray.cc:319
 honlinehistarray.cc:320
 honlinehistarray.cc:321
 honlinehistarray.cc:322
 honlinehistarray.cc:323
 honlinehistarray.cc:324
 honlinehistarray.cc:325
 honlinehistarray.cc:326
 honlinehistarray.cc:327
 honlinehistarray.cc:328
 honlinehistarray.cc:329
 honlinehistarray.cc:330
 honlinehistarray.cc:331
 honlinehistarray.cc:332
 honlinehistarray.cc:333
 honlinehistarray.cc:334
 honlinehistarray.cc:335
 honlinehistarray.cc:336
 honlinehistarray.cc:337
 honlinehistarray.cc:338
 honlinehistarray.cc:339
 honlinehistarray.cc:340
 honlinehistarray.cc:341
 honlinehistarray.cc:342
 honlinehistarray.cc:343
 honlinehistarray.cc:344
 honlinehistarray.cc:345
 honlinehistarray.cc:346
 honlinehistarray.cc:347
 honlinehistarray.cc:348
 honlinehistarray.cc:349
 honlinehistarray.cc:350
 honlinehistarray.cc:351
 honlinehistarray.cc:352
 honlinehistarray.cc:353
 honlinehistarray.cc:354
 honlinehistarray.cc:355
 honlinehistarray.cc:356
 honlinehistarray.cc:357
 honlinehistarray.cc:358
 honlinehistarray.cc:359
 honlinehistarray.cc:360
 honlinehistarray.cc:361
 honlinehistarray.cc:362
 honlinehistarray.cc:363
 honlinehistarray.cc:364
 honlinehistarray.cc:365
 honlinehistarray.cc:366
 honlinehistarray.cc:367
 honlinehistarray.cc:368
 honlinehistarray.cc:369
 honlinehistarray.cc:370
 honlinehistarray.cc:371
 honlinehistarray.cc:372
 honlinehistarray.cc:373
 honlinehistarray.cc:374
 honlinehistarray.cc:375
 honlinehistarray.cc:376
 honlinehistarray.cc:377
 honlinehistarray.cc:378
 honlinehistarray.cc:379
 honlinehistarray.cc:380
 honlinehistarray.cc:381
 honlinehistarray.cc:382
 honlinehistarray.cc:383
 honlinehistarray.cc:384
 honlinehistarray.cc:385
 honlinehistarray.cc:386
 honlinehistarray.cc:387
 honlinehistarray.cc:388
 honlinehistarray.cc:389
 honlinehistarray.cc:390
 honlinehistarray.cc:391
 honlinehistarray.cc:392
 honlinehistarray.cc:393
 honlinehistarray.cc:394
 honlinehistarray.cc:395
 honlinehistarray.cc:396
 honlinehistarray.cc:397
 honlinehistarray.cc:398
 honlinehistarray.cc:399
 honlinehistarray.cc:400
 honlinehistarray.cc:401
 honlinehistarray.cc:402
 honlinehistarray.cc:403
 honlinehistarray.cc:404
 honlinehistarray.cc:405
 honlinehistarray.cc:406
 honlinehistarray.cc:407
 honlinehistarray.cc:408
 honlinehistarray.cc:409
 honlinehistarray.cc:410
 honlinehistarray.cc:411
 honlinehistarray.cc:412
 honlinehistarray.cc:413
 honlinehistarray.cc:414
 honlinehistarray.cc:415
 honlinehistarray.cc:416
 honlinehistarray.cc:417
 honlinehistarray.cc:418
 honlinehistarray.cc:419
 honlinehistarray.cc:420
 honlinehistarray.cc:421
 honlinehistarray.cc:422
 honlinehistarray.cc:423
 honlinehistarray.cc:424
 honlinehistarray.cc:425
 honlinehistarray.cc:426
 honlinehistarray.cc:427
 honlinehistarray.cc:428
 honlinehistarray.cc:429
 honlinehistarray.cc:430
 honlinehistarray.cc:431
 honlinehistarray.cc:432
 honlinehistarray.cc:433
 honlinehistarray.cc:434
 honlinehistarray.cc:435
 honlinehistarray.cc:436
 honlinehistarray.cc:437
 honlinehistarray.cc:438
 honlinehistarray.cc:439
 honlinehistarray.cc:440
 honlinehistarray.cc:441
 honlinehistarray.cc:442
 honlinehistarray.cc:443
 honlinehistarray.cc:444
 honlinehistarray.cc:445
 honlinehistarray.cc:446
 honlinehistarray.cc:447
 honlinehistarray.cc:448
 honlinehistarray.cc:449
 honlinehistarray.cc:450
 honlinehistarray.cc:451
 honlinehistarray.cc:452
 honlinehistarray.cc:453
 honlinehistarray.cc:454
 honlinehistarray.cc:455
 honlinehistarray.cc:456
 honlinehistarray.cc:457
 honlinehistarray.cc:458
 honlinehistarray.cc:459
 honlinehistarray.cc:460
 honlinehistarray.cc:461
 honlinehistarray.cc:462
 honlinehistarray.cc:463
 honlinehistarray.cc:464
 honlinehistarray.cc:465
 honlinehistarray.cc:466
 honlinehistarray.cc:467
 honlinehistarray.cc:468
 honlinehistarray.cc:469
 honlinehistarray.cc:470
 honlinehistarray.cc:471
 honlinehistarray.cc:472
 honlinehistarray.cc:473
 honlinehistarray.cc:474
 honlinehistarray.cc:475
 honlinehistarray.cc:476
 honlinehistarray.cc:477
 honlinehistarray.cc:478
 honlinehistarray.cc:479
 honlinehistarray.cc:480
 honlinehistarray.cc:481
 honlinehistarray.cc:482
 honlinehistarray.cc:483
 honlinehistarray.cc:484
 honlinehistarray.cc:485
 honlinehistarray.cc:486
 honlinehistarray.cc:487
 honlinehistarray.cc:488
 honlinehistarray.cc:489
 honlinehistarray.cc:490
 honlinehistarray.cc:491
 honlinehistarray.cc:492
 honlinehistarray.cc:493
 honlinehistarray.cc:494
 honlinehistarray.cc:495
 honlinehistarray.cc:496
 honlinehistarray.cc:497
 honlinehistarray.cc:498
 honlinehistarray.cc:499
 honlinehistarray.cc:500
 honlinehistarray.cc:501
 honlinehistarray.cc:502
 honlinehistarray.cc:503
 honlinehistarray.cc:504
 honlinehistarray.cc:505
 honlinehistarray.cc:506
 honlinehistarray.cc:507
 honlinehistarray.cc:508
 honlinehistarray.cc:509
 honlinehistarray.cc:510
 honlinehistarray.cc:511
 honlinehistarray.cc:512
 honlinehistarray.cc:513
 honlinehistarray.cc:514
 honlinehistarray.cc:515
 honlinehistarray.cc:516
 honlinehistarray.cc:517
 honlinehistarray.cc:518
 honlinehistarray.cc:519
 honlinehistarray.cc:520
 honlinehistarray.cc:521
 honlinehistarray.cc:522
 honlinehistarray.cc:523
 honlinehistarray.cc:524
 honlinehistarray.cc:525
 honlinehistarray.cc:526
 honlinehistarray.cc:527
 honlinehistarray.cc:528
 honlinehistarray.cc:529
 honlinehistarray.cc:530
 honlinehistarray.cc:531
 honlinehistarray.cc:532
 honlinehistarray.cc:533
 honlinehistarray.cc:534
 honlinehistarray.cc:535
 honlinehistarray.cc:536
 honlinehistarray.cc:537
 honlinehistarray.cc:538
 honlinehistarray.cc:539
 honlinehistarray.cc:540
 honlinehistarray.cc:541
 honlinehistarray.cc:542
 honlinehistarray.cc:543
 honlinehistarray.cc:544
 honlinehistarray.cc:545
 honlinehistarray.cc:546
 honlinehistarray.cc:547
 honlinehistarray.cc:548
 honlinehistarray.cc:549
 honlinehistarray.cc:550
 honlinehistarray.cc:551
 honlinehistarray.cc:552
 honlinehistarray.cc:553
 honlinehistarray.cc:554
 honlinehistarray.cc:555
 honlinehistarray.cc:556
 honlinehistarray.cc:557
 honlinehistarray.cc:558
 honlinehistarray.cc:559
 honlinehistarray.cc:560
 honlinehistarray.cc:561
 honlinehistarray.cc:562
 honlinehistarray.cc:563
 honlinehistarray.cc:564
 honlinehistarray.cc:565
 honlinehistarray.cc:566
 honlinehistarray.cc:567
 honlinehistarray.cc:568
 honlinehistarray.cc:569
 honlinehistarray.cc:570
 honlinehistarray.cc:571
 honlinehistarray.cc:572
 honlinehistarray.cc:573
 honlinehistarray.cc:574
 honlinehistarray.cc:575
 honlinehistarray.cc:576
 honlinehistarray.cc:577
 honlinehistarray.cc:578
 honlinehistarray.cc:579
 honlinehistarray.cc:580
 honlinehistarray.cc:581
 honlinehistarray.cc:582
 honlinehistarray.cc:583
 honlinehistarray.cc:584
 honlinehistarray.cc:585
 honlinehistarray.cc:586
 honlinehistarray.cc:587
 honlinehistarray.cc:588
 honlinehistarray.cc:589
 honlinehistarray.cc:590
 honlinehistarray.cc:591
 honlinehistarray.cc:592
 honlinehistarray.cc:593
 honlinehistarray.cc:594
 honlinehistarray.cc:595
 honlinehistarray.cc:596
 honlinehistarray.cc:597
 honlinehistarray.cc:598
 honlinehistarray.cc:599
 honlinehistarray.cc:600
 honlinehistarray.cc:601
 honlinehistarray.cc:602
 honlinehistarray.cc:603
 honlinehistarray.cc:604
 honlinehistarray.cc:605
 honlinehistarray.cc:606
 honlinehistarray.cc:607
 honlinehistarray.cc:608
 honlinehistarray.cc:609
 honlinehistarray.cc:610
 honlinehistarray.cc:611
 honlinehistarray.cc:612
 honlinehistarray.cc:613
 honlinehistarray.cc:614
 honlinehistarray.cc:615
 honlinehistarray.cc:616
 honlinehistarray.cc:617
 honlinehistarray.cc:618
 honlinehistarray.cc:619
 honlinehistarray.cc:620
 honlinehistarray.cc:621
 honlinehistarray.cc:622
 honlinehistarray.cc:623
 honlinehistarray.cc:624
 honlinehistarray.cc:625
 honlinehistarray.cc:626
 honlinehistarray.cc:627
 honlinehistarray.cc:628
 honlinehistarray.cc:629
 honlinehistarray.cc:630
 honlinehistarray.cc:631
 honlinehistarray.cc:632
 honlinehistarray.cc:633
 honlinehistarray.cc:634
 honlinehistarray.cc:635
 honlinehistarray.cc:636
 honlinehistarray.cc:637
 honlinehistarray.cc:638