ROOT logo
//*-- AUTHOR : J. Markert

//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////////////////
// HMdcGarCal2Maker
// Reads Histograms for time1/time2 versus distance from wire from root file
// produced with HMdcGarSignalReader. The values for time1 and time2 and the
// corresponding errors are processed (spike removing, smoothing, cut at max
// value per mdc) for all MDC's and all impact angles for time1, time2,
// error of time1 and error of time2. A root file with the control hists is
// written and an ascii file containing the parameters of HMdcCal2ParSim is
// produced.
////////////////////////////////////////////////////////////////////////////
using namespace std;
#include <stdlib.h>
#include <iostream> 
#include <iomanip>
#include "hmdcgarcal2maker.h"
#include "htool.h"
#include "TString.h"
#include "TFile.h"
#include "TDirectory.h"
#include "TF1.h"
#include "TH1.h"
#include "TH2.h"
#include "TROOT.h"
#include "TKey.h"
#include "TStyle.h"
#include "TCanvas.h"
#include "TGraph.h"
#include "TMath.h"
#include "TLine.h"


Int_t HMdcGarCal2Maker ::maxbinNumber[72]={25,28,28,31,33,34,  //25   // 6% treshold
                                           35,35,36,37,36,35,  //55
					   35,34,33,31,29,27,

                                           29,32,33,35,36,37,
					   40,39,39,39,38,38,
					   37,31,34,32,30,28, //65:36->31

					   60,63,65,68,69,70, //36           // 10:66->65 20:70->69 25:71->70
					   71,71,71,70,68,66,
					   64,61,57,53,49,44,                // 75:54->53 85: 45->44

					   70,75,78,81,83,85,
					   86,87,86,85,84,82,
					   79,75,71,67,62,56 };

Float_t HMdcGarCal2Maker::cutMax     [4]={110,120,260,370};

ClassImp(HMdcGarCal2Maker)

HMdcGarCal2Maker::HMdcGarCal2Maker(const Char_t* name,const Char_t* title)
    : TNamed(name,title)
{
    // constructor for HMdcGarCal2Maker
    // The parameters are initialized with non valid values.
    initVariables();
}
HMdcGarCal2Maker::~HMdcGarCal2Maker()
{
    // destructor of HMdcGarCal2Maker
    outputHists->Write();
    outputHists->Close();
}
void HMdcGarCal2Maker::setFileNameOut(TString myfile)
{
    // Sets ascii output of HMdcGarCal2Maker
    fNameAsciiOut=myfile;
    if(fNameAsciiOut.CompareTo("")==0)
    {
	Error("HMdcGarCal2Maker:setFileNameOut()","NO OUTPUT FILE SEPCIFIED!");
        exit(1);
    };
    cout<<"HMdcGarCal2Maker::setFileNameOut(): OUTPUT FILE= "<<fNameAsciiOut.Data()<<endl;
}
void HMdcGarCal2Maker::setFileNameIn(TString myfile)
{
    // Sets root input of HMdcGarCal2Maker
    fNameRootIn=myfile;
    if(fNameRootIn.CompareTo("")==0)
    {
	Error("HMdcGarCal2Maker:setFileNameIn() ","NO INPUT  FILE SEPCIFIED!");
        exit(1);
    };
    cout<<"HMdcGarCal2Maker::setFileNameIn() : INPUT  FILE= "<<fNameRootIn.Data()<<endl;
}
void HMdcGarCal2Maker::initVariables()
{
    // inits all variables
    fNameAsciiOut      ="";
    output             =0;
    fNameRootIn        ="";
    inputRoot          =0;
    htime1             =0;
    htime2             =0;
    //HTool::open(&outputHists,"cal2makerHists.root","RECREATE");
    outputHists = new TFile("cal2makerHists.root","RECREATE");
    initArrays();
    setThreshold(5);
    setStepSize(2);
    setSlope(10);
    setBatchMode(kFALSE);
    setPrintMode(kFALSE);
    setWriteHists(kTRUE);
    setWriteAscii(kTRUE);
    setMaxErrTime1(30);
    setMaxErrTime2(50);
    setSpikeTypes(1,1,1,1);
    setSpikeThresholds(0.5,5.0);
    setNTimes(10,10,10,10);
    setNBin1D_Dist(110);
    setNBin2D_Dist(100);
    setNBin2D_Angle(19);
    setMinCopy(90);
    setMaxCopy(4);
    setHists_1D(1,1,1,1);
    setHists_2D(1,1,1,1);
    setLevelColors(2,4,8);
    setVoltage(1750,1800,2000,2400);
    setMakeMdc(1,1,1,1);
    setMakeType(1,1,1,1);
    setVersion(2);
}
void HMdcGarCal2Maker::printStatus(void)
{
    // prints the parameters to the screen
    printf ("HMdcGarCal2Maker::printStatus()\n");
    printf ("Version                           :  %i \n",getVersion());
    printf ("WriteHists                        :  %i \n",(Int_t)getWriteHists());
    printf ("WriteAscii                        :  %i \n",(Int_t)getWriteAscii());
    printf ("Make Mdc                          :  %i %i %i  %i \n",getMakeMdc(0),getMakeMdc(1),getMakeMdc(2),getMakeMdc(3));
    printf ("Make Type                         :  %i %i %i  %i \n",getMakeType(0),getMakeType(1),getMakeType(2),getMakeType(3));
    printf ("BatchMode                         :  %i \n",(Int_t)getBatchMode());
    printf ("Threshold                         :  %i%%\n",getStepSize()*getThreshold());
    printf ("Cut Max                           :  %i ns %i ns %i ns %i ns \n",(Int_t)getCutMax(0),(Int_t)getCutMax(1),(Int_t)getCutMax(2),(Int_t)getCutMax(3));
    printf ("MaxBinNumber   mdc 0 ------------ :  %i %i %i %i %i %i \n",maxbinNumber[0] ,maxbinNumber[1] ,maxbinNumber[2] ,maxbinNumber[3] ,maxbinNumber[4] ,maxbinNumber[5]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[6] ,maxbinNumber[7] ,maxbinNumber[8] ,maxbinNumber[9] ,maxbinNumber[10],maxbinNumber[11]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[12],maxbinNumber[13],maxbinNumber[14],maxbinNumber[15],maxbinNumber[16],maxbinNumber[17]);
    printf ("               mdc 1 ------------ :  %i %i %i %i %i %i \n",maxbinNumber[18],maxbinNumber[19],maxbinNumber[20],maxbinNumber[21],maxbinNumber[22],maxbinNumber[23]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[24],maxbinNumber[25],maxbinNumber[26],maxbinNumber[27],maxbinNumber[28],maxbinNumber[29]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[30],maxbinNumber[31],maxbinNumber[32],maxbinNumber[33],maxbinNumber[34],maxbinNumber[35]);
    printf ("               mdc 2 ------------ :  %i %i %i %i %i %i \n",maxbinNumber[36],maxbinNumber[37],maxbinNumber[38],maxbinNumber[39],maxbinNumber[40],maxbinNumber[41]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[42],maxbinNumber[43],maxbinNumber[44],maxbinNumber[45],maxbinNumber[46],maxbinNumber[47]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[48],maxbinNumber[49],maxbinNumber[50],maxbinNumber[51],maxbinNumber[52],maxbinNumber[53]);
    printf ("               mdc 3 ------------ :  %i %i %i %i %i %i \n",maxbinNumber[54],maxbinNumber[55],maxbinNumber[56],maxbinNumber[57],maxbinNumber[58],maxbinNumber[59]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[60],maxbinNumber[61],maxbinNumber[62],maxbinNumber[63],maxbinNumber[64],maxbinNumber[65]);
    printf ("                                  :  %i %i %i %i %i %i \n",maxbinNumber[66],maxbinNumber[67],maxbinNumber[68],maxbinNumber[69],maxbinNumber[70],maxbinNumber[71]);
    printf ("Slope                             :  %3.1f ns/mm\n",getSlope()/0.1);
    printf ("MaxErrTime1                       :  %3.1f ns\n",getMaxErrTime1());
    printf ("MaxErrTime2                       :  %3.1f ns\n",getMaxErrTime2());
    printf ("Spike Types                       :  %i %i %i  %i \n",getSpikeTypes(0),getSpikeTypes(1),getSpikeTypes(2),getSpikeTypes(3));
    printf ("Spike thresholds                  :  %3.1f %3.1f\n",getSpikeThreshold1(),getSpikeThreshold2());
    printf ("MaxCopy and MinCopy               :  %i %i\n",getMaxCopy(),getMinCopy());
    printf ("Active Hists 1D                   :  %i %i %i\n",getHists_1D(0),getHists_1D(1),getHists_1D(2));
    printf ("Active Hists 2D                   :  %i %i %i\n",getHists_2D(0),getHists_2D(1),getHists_2D(2));
    printf ("RootInPut                         :  %s\n",fNameRootIn .Data());
    printf ("AsciiOutPut                       :  %s\n",fNameAsciiOut.Data());
    printf ("HistOutPut                        :  %s\n",outputHists->GetName());
}
Bool_t HMdcGarCal2Maker::check(Int_t m,Int_t t)
{
    // Checks if the Mdc m and the type t (t1,t1err,t2,t2err)
    // is active in the current setup
    Bool_t test=kFALSE;

    if(t!=-99&&m!=-99)
    {
	if(getMakeMdc(m)==1&&getMakeType(t)==1)test=kTRUE;
	else test=kFALSE;
    }
    if(t==-99&&m!=-99)
    {
	if(getMakeMdc(m)==1)test=kTRUE;
	else test=kFALSE;
    }
    if(t!=-99&&m==-99)
    {
	if(getMakeType(t)==1)test=kTRUE;
	else test=kFALSE;
    }
    return test;
}
void HMdcGarCal2Maker::calcBounderies(Int_t mdc,Int_t a,Float_t* cellEdge,Float_t* maxDist)
{
    // Calulates the bounderies of the different cell types of the MDC's underr
    // certain impact angle "a". "cellEdge" is the max distances of a track with
    // minimum distance at the cell border whereas "maxDist" is the max minimum
    // distance of a track just hitting the cell.

    Double_t cellY[4]={2.5,3.0,6.0,7.0};
    Double_t cellX[4]={2.5,2.6,4.0,5.0};
    Double_t alphaRad=((a*5)/180.*TMath::Pi());
    Double_t celledgeY=cellY[mdc]/cos(alphaRad);
    Double_t celledgeX;
    (a==0)? celledgeX=cellY[mdc] : celledgeX=cellX[mdc]/sin(alphaRad);
    (celledgeY>celledgeX)? *cellEdge=(Float_t)celledgeX : *cellEdge=(Float_t)celledgeY;

    if(a!=0)
    {
	Double_t alphaRad2=((a*5-90)/180.*TMath::Pi()); // angle of track
	Double_t b= cellX[mdc]-(tan(alphaRad2)*cellY[mdc]);
	Double_t y=-b/(tan(alphaRad2)-tan(alphaRad));
	Double_t x=tan(alphaRad)*y;
	*maxDist =(Float_t)sqrt((y*y)+(x*x));
    }
    else *maxDist=(Float_t)cellY[mdc];
}
void HMdcGarCal2Maker::make()
{
    // Main function to be called from the macro.
    cout<<"--------------------------------------------------------------"<<endl;
    printStatus();
    cout<<"--------------------------------------------------------------"<<endl;
    readInput();
    cout<<"--------------------------------------------------------------"<<endl;
    for(Int_t mdc=0;mdc<4;mdc++){
	for(Int_t type=0;type<4;type++){
            if(!check(mdc,type))continue;
	    if(getHists_2D(0)==1)fillControl2D(mdc,type,"raw");
            if(getHists_1D(3)==1)createGraph(mdc,type,0);
	}
    }
    for(Int_t mdc=0;mdc<4;mdc++){
	for(Int_t type=0;type<4;type++){
	    if(!check(mdc,type))continue;
	    if(getHists_1D(0)==1)fillControl1D(mdc,type,"raw");
	}
    }

    if(getWriteHists())
    {
       cout<<"HMdcGarCal2Maker::make()          : Control Hists Raw written to file"<<endl;
    }
    cout<<"--------------------------------------------------------------"<<endl;
    cout<<"HMdcGarCal2Maker::findMax()       : Find Max values in Time1 err"<<endl;
    cout<<"HMdcGarCal2Maker::removeSpikes()  : Find and remove spikes in Time1 err"<<endl;

    for(Int_t mdc=0;mdc<4;mdc++){
	if(!check(mdc,1))continue;
	findMax(mdc);
        removeSpikes(mdc);
	if(getHists_1D(1)==1)fillControl1D(mdc,1,"spike");
        if(getHists_2D(1)==1)fillControl2D(mdc,1,"spike");

	for(Int_t type=0;type<4;type++){
	    if(!check(mdc,type))continue;
	    if(getHists_1D(3)==1)createGraph(mdc,type,1);
	}
    }
    if(getWriteHists())
    {
	cout<<"HMdcGarCal2Maker::make()          : Control Hists Spike written to file"<<endl;
    }
    cout<<"--------------------------------------------------------------"<<endl;
    cout<<"HMdcGarCal2Maker::copyToHist()    : Copy array to temp hist"<<endl;
    cout<<"HMdcGarCal2Maker::smoothHist()    : Smooth temp Hist"<<endl;
    cout<<"HMdcGarCal2Maker::copyToArray()   : copy smoothed temp hist to array"<<endl;

    for(Int_t mdc=0;mdc<4;mdc++){
	for(Int_t type=0;type<4;type++){
	    if(!check(mdc,type))continue;


	    if(type == 0 ){
		do2dSavitzkyGolayFiltering(&mtime1_corr[mdc][0][0],18,100,kFALSE) ;
	    }
	    if(type == 1){
		//------------------------------------------------------
		// create a fake neighbour bin for time1err 2d smoothing
		Float_t smooth_time_err[19][100];
		for(Int_t a1=0;a1<18;a1++){
		    for(Int_t b=0;b<100;b++){
			smooth_time_err[a1+1][b]=mtime1_err_corr[mdc][a1][b];
		    }
		}
		for(Int_t b=0;b<100;b++){
		    smooth_time_err[0][b]=mtime1_err_corr[mdc][1][b];
		}
		//------------------------------------------------------
                Int_t ntimes = 1;
		if(mdc == 0 || mdc == 1 ) ntimes=1;
                else                      ntimes=10;
		for(Int_t n=0;n<ntimes;n++){
		    do2dSavitzkyGolayFiltering(&smooth_time_err[0][0],19,100,kFALSE) ;
		}
		//------------------------------------------------------
		// copy back to ariginal array
		for(Int_t a1=0;a1<18;a1++){
		    for(Int_t b=0;b<100;b++){
			mtime1_err_corr[mdc][a1][b] = smooth_time_err[a1+1][b];
		    }
		}
		//------------------------------------------------------

	    }

	    for(Int_t a=0;a<18;a++){
	
		TH1F *hlocal=new TH1F("temp","temp",getNBin1D_Dist(),0,getNBin1D_Dist()*0.1);

		copyToHist (hlocal,mdc,a,type);
		if(type == 2 || type == 3){
		    smoothHist (hlocal,type);
		}
		if(type == 0 || type == 1 ){
		    fitHist(hlocal,mdc,a,type);
		    if(type == 1 ) {

			Float_t cellEdge;
			Float_t maxDist;
			calcBounderies(mdc,a,&cellEdge,&maxDist);
			Int_t lastBin = 0;
			if(mdc < 2 ){
			    lastBin = Int_t(cellEdge*0.6*10);
			} else {
			    lastBin = Int_t(cellEdge*0.75*10);
			}
			HTool::smooth(hlocal,1000,1,lastBin);
		    }
		}
		replaceBins(hlocal,mdc,a,type);
		copyToArray(hlocal,mdc,a,type);
	      
		HTool::deleteObject(hlocal);
	    }
	    if(getHists_1D(2)==1)fillControl1D(mdc,type,"smooth");
	    if(getHists_2D(2)==1)fillControl2D(mdc,type,"smooth");
            if(getHists_1D(3)==1)createGraph(mdc,type,2);


	}
    }
    if(getWriteHists())
    {
	cout<<"HMdcGarCal2Maker::make()          : Control Hists Smooth written to file"<<endl;
    }
    cout<<"--------------------------------------------------------------"<<endl;
    cout<<"HMdcGarCal2Maker::plotOverLay()   : Overlay TGraph for different levels"<<endl;
    for(Int_t mdc=0;mdc<4;mdc++){
	for(Int_t type=0;type<4;type++){
	    if(!check(mdc,type))continue;
	    if(getHists_1D(3)==1)plotOverlay(mdc,type);
	}
    }
    if(getWriteHists())
    {
	cout<<"HMdcGarCal2Maker::make()          : Overlay plot written to file"<<endl;
    }
    cout<<"--------------------------------------------------------------"<<endl;
    writeAscii();
    cout<<"--------------------------------------------------------------"<<endl;
  

}
void HMdcGarCal2Maker::fillArrays(TH1F* htime1,TH1F* htime2,Int_t mdctype,Int_t angle)
{
    // Fills values for time1, time2 and the corresponding errors from the hists into
    // working arrays.
    if(getVersion()==1)
    {
	for(Int_t sample=0;sample<100;sample++)
	{
	    if(sample<=maxbinNumber[(mdctype*18)+angle])
	    {  // fill all valid values

		//######################################## FILL MATRIX ############################################################
		if(sample==1)
		{  // fill first bin
		    mtime1    [mdctype][angle][0]=htime1->GetBinContent(sample);
		    mtime2    [mdctype][angle][0]=htime2->GetBinContent(sample);
		    mtime1_err[mdctype][angle][0]=htime1->GetBinError(sample);
		    mtime2_err[mdctype][angle][0]=htime2->GetBinError(sample);

		    mtime1_corr    [mdctype][angle][0] = mtime1    [mdctype][angle][0];
		    mtime1_err_corr[mdctype][angle][0] = mtime1_err[mdctype][angle][0];
		    mtime2_corr    [mdctype][angle][0] = mtime2    [mdctype][angle][0];
		    mtime2_err_corr[mdctype][angle][0] = mtime2_err[mdctype][angle][0];

		}

		if( (htime1->GetBinContent(sample))<getCutMax(mdctype))
		{   // fill if smaller than max time
		    mtime1    [mdctype][angle][sample]=htime1->GetBinContent(sample);
		    mtime2    [mdctype][angle][sample]=htime2->GetBinContent(sample);

		    mtime1_err[mdctype][angle][sample]=htime1->GetBinError(sample);
		    mtime2_err[mdctype][angle][sample]=htime2->GetBinError(sample);

		    lastvalidBin[mdctype][angle]=sample;
		}
		else
		{
		    if (lastvalidBin[mdctype][angle]<=getMaxBinNumber((mdctype*18)+angle))
		    {   // fill range between lastvalid and maxnumber of bins

			mtime1    [mdctype][angle][sample]=getCutMax(mdctype) +(lastvalidBin[mdctype][angle]-sample)*-getSlope();
			mtime2    [mdctype][angle][sample]=getCutMax(mdctype) +(lastvalidBin[mdctype][angle]-sample)*-getSlope();

			mtime1_err[mdctype][angle][sample]=mtime1_err[mdctype][angle][lastvalidBin[mdctype][angle]];
			mtime2_err[mdctype][angle][sample]=mtime2_err[mdctype][angle][lastvalidBin[mdctype][angle]];
		    }
		}
		//#################################################################################################################

	    }
	    else
	    {   // fill rest of Matrix
		// fill range larger max number of bins

		mtime1    [mdctype][angle][sample]=mtime1[mdctype][angle][getMaxBinNumber((mdctype*18)+angle)] + (getMaxBinNumber((mdctype*18)+angle)-sample)*-getSlope();
		mtime2    [mdctype][angle][sample]=mtime2[mdctype][angle][getMaxBinNumber((mdctype*18)+angle)] + (getMaxBinNumber((mdctype*18)+angle)-sample)*-getSlope();

		if(htime1->GetBinError(getMaxBinNumber((mdctype*18)+angle))>0)
		{
		    mtime1_err[mdctype][angle][sample]=getMaxErrTime1();
		}
		else
		{
		    mtime1_err[mdctype][angle][sample]=getMaxErrTime1();
		}
		if(htime2->GetBinError(getMaxBinNumber((mdctype*18)+angle))>0)
		{
		    mtime2_err[mdctype][angle][sample]=getMaxErrTime2();
		}
		else
		{
		    mtime2_err[mdctype][angle][sample]=getMaxErrTime2();
		}
		//#################################################################################################################
	    }

	    //coppy array
	    mtime1_corr    [mdctype][angle][sample] = mtime1    [mdctype][angle][sample];
	    mtime1_err_corr[mdctype][angle][sample] = mtime1_err[mdctype][angle][sample];
	    mtime2_corr    [mdctype][angle][sample] = mtime2    [mdctype][angle][sample];
	    mtime2_err_corr[mdctype][angle][sample] = mtime2_err[mdctype][angle][sample];
	}
    }
    if(getVersion()==2)
    {
	for(Int_t sample=0;sample<100;sample++)
	{
	    if(sample<=maxbinNumber[(mdctype*18)+angle])
	    {  // fill all valid values

		//######################################## FILL MATRIX ############################################################
		if(sample==1)
		{  // fill first bin
		    mtime1    [mdctype][angle][0]=htime1->GetBinContent(sample+1);
		    mtime2    [mdctype][angle][0]=htime2->GetBinContent(sample+1);
		    mtime1_err[mdctype][angle][0]=htime1->GetBinError(sample+1);
		    mtime2_err[mdctype][angle][0]=htime2->GetBinError(sample+1);

		    mtime1_corr    [mdctype][angle][0] = mtime1    [mdctype][angle][0];
		    mtime1_err_corr[mdctype][angle][0] = mtime1_err[mdctype][angle][0];
		    mtime2_corr    [mdctype][angle][0] = mtime2    [mdctype][angle][0];
		    mtime2_err_corr[mdctype][angle][0] = mtime2_err[mdctype][angle][0];

		}

		if( (htime1->GetBinContent(sample+1))<getCutMax(mdctype))
		{   // fill if smaller than max time
		    mtime1    [mdctype][angle][sample]=htime1->GetBinContent(sample+1);
		    mtime2    [mdctype][angle][sample]=htime2->GetBinContent(sample+1);

		    mtime1_err[mdctype][angle][sample]=htime1->GetBinError(sample+1);
		    mtime2_err[mdctype][angle][sample]=htime2->GetBinError(sample+1);

		    lastvalidBin[mdctype][angle]=sample;
		}
		else
		{
		    if (lastvalidBin[mdctype][angle]<=getMaxBinNumber((mdctype*18)+angle))
		    {   // fill range between lastvalid and maxnumber of bins

			mtime1    [mdctype][angle][sample]=getCutMax(mdctype) +(lastvalidBin[mdctype][angle]-sample)*-getSlope();
			mtime2    [mdctype][angle][sample]=getCutMax(mdctype) +(lastvalidBin[mdctype][angle]-sample)*-getSlope();

			mtime1_err[mdctype][angle][sample]=mtime1_err[mdctype][angle][lastvalidBin[mdctype][angle]];
			mtime2_err[mdctype][angle][sample]=mtime2_err[mdctype][angle][lastvalidBin[mdctype][angle]];
		    }
		}
		//#################################################################################################################

	    }
	    else
	    {   // fill rest of Matrix
		// fill range larger max number of bins

		mtime1    [mdctype][angle][sample]=mtime1[mdctype][angle][getMaxBinNumber((mdctype*18)+angle)] + (getMaxBinNumber((mdctype*18)+angle)-sample)*-getSlope();
		mtime2    [mdctype][angle][sample]=mtime2[mdctype][angle][getMaxBinNumber((mdctype*18)+angle)] + (getMaxBinNumber((mdctype*18)+angle)-sample)*-getSlope();

		if(htime1->GetBinError(getMaxBinNumber((mdctype*18)+angle +1))>0)
		{
		    mtime1_err[mdctype][angle][sample]=getMaxErrTime1();
		}
		else
		{
		    mtime1_err[mdctype][angle][sample]=getMaxErrTime1();
		}
		if(htime2->GetBinError(getMaxBinNumber((mdctype*18)+angle +1))>0)
		{
		    mtime2_err[mdctype][angle][sample]=getMaxErrTime2();
		}
		else
		{
		    mtime2_err[mdctype][angle][sample]=getMaxErrTime2();
		}
		//#################################################################################################################
	    }

	    //coppy array
	    mtime1_corr    [mdctype][angle][sample] = mtime1    [mdctype][angle][sample];
	    mtime1_err_corr[mdctype][angle][sample] = mtime1_err[mdctype][angle][sample];
	    mtime2_corr    [mdctype][angle][sample] = mtime2    [mdctype][angle][sample];
	    mtime2_err_corr[mdctype][angle][sample] = mtime2_err[mdctype][angle][sample];
	}
    }


}
void HMdcGarCal2Maker::findMax(Int_t m)
{
    // finds maximum values inside the array of
    // time1err and replacing values after max by
    // a constant value.

    Float_t cellEdge;
    Float_t maxDist;
    Int_t   startBin;



    for(Int_t a=0;a<18;a++)
    {
        // start finding spikes at 80% of the drift
        // cell size (10 bins = 1 mm)
        calcBounderies(m,a,&cellEdge,&maxDist);
	startBin=Int_t(cellEdge*0.8*10);

	// reset arrays
	max1[m][a] = -1.;
        max2[m][a] = -1.;
	max1bin[m][a] = 100;
	max2bin[m][a] = 100;

	// Max1
	for(Int_t i=startBin;i<100;i++)
	{   // find max1 and max1bin
	    if(mtime1_err_corr[m][a][i]>max1[m][a])
	    {
		max1   [m][a]=mtime1_err_corr[m][a][i];
		max1bin[m][a]=i;
	    }
	}
	for(Int_t i=max1bin[m][a];i<100;i++)
	{   // replace bins >max1bin with max1 value
	    mtime1_err_corr[m][a][i]=max1[m][a];
	}

	for(Int_t i=0;i<100;i++)
	{   // replace bins >maxErrTime1 by maxErrTime1
	    if(mtime1_err_corr[m][a][i]>getMaxErrTime1()){
               mtime1_err_corr[m][a][i]=getMaxErrTime1();
	    }
	}
    }
}

void HMdcGarCal2Maker::removeSpikes(Int_t m)
{
    // Removes spikes from time1err

    //-------------------remove spikes -------------------------------
    Float_t slopeSpike=0;
    Float_t oldslopeSpike=0;
    if(!getPrintMode())cout<<"mdc "<<m<<" :"<<flush;
     
    for(Int_t a=0;a<18;a++)
    {
        if(!getPrintMode())cout<<" "<<a<<flush;
        if( getPrintMode())cout<<m<<" "<<a<<endl;

	for(Int_t i=1;i<99;i++)
	{
	    oldslopeSpike= mtime1_err_corr[m][a][i]  -mtime1_err_corr[m][a][i-1];
	    slopeSpike   = mtime1_err_corr[m][a][i+1]-mtime1_err_corr[m][a][i];

	    if((slopeSpike<0 && oldslopeSpike>0) &&
	       (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i])  >getSpikeThreshold1()) &&
	       (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+1])<getSpikeThreshold2()) &&
                i<98
	      )
	    {// 1 bin spike

		if(getPrintMode())cout<<"     1bin "<<i
			<<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
			<<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
			<<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
			<<endl;

		mtime1_err_corr[m][a][i]=(mtime1_err_corr[m][a][i-1]+mtime1_err_corr[m][a][i+1])*0.5;

		if(getPrintMode())cout<<"     1bin "<<i
			<<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
			<<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
			<<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
			<<endl;
	    }
	    if(i<98)
	    {
		oldslopeSpike= mtime1_err_corr[m][a][i]  -mtime1_err_corr[m][a][i-1];
		slopeSpike   = mtime1_err_corr[m][a][i+2]-mtime1_err_corr[m][a][i];

		if( (slopeSpike<0 && oldslopeSpike>0) &&
		   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i])  >getSpikeThreshold1()) &&
		   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+1])>getSpikeThreshold1()) &&
		   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+2])<getSpikeThreshold2()) &&
		   i<97)
		{ // 2 bin spike

		    if(getPrintMode())cout<<"     2bin "<<i
			<<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
			    <<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
			    <<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
			    <<"\n      y[i+2] "<<mtime1_err_corr[m][a][i+2]
			    <<endl;

		    mtime1_err_corr[m][a][i]  =mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+2])*0.3333;
		    mtime1_err_corr[m][a][i+1]=mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+2])*0.3333*2;

		    if(getPrintMode())cout<<"     2bin "<<i
			<<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
			    <<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
			    <<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
			    <<"\n      y[i+2] "<<mtime1_err_corr[m][a][i+2]
			    <<endl;

		}
		if(i<97)
		{
		    oldslopeSpike= mtime1_err_corr[m][a][i]  -mtime1_err_corr[m][a][i-1];
		    slopeSpike   = mtime1_err_corr[m][a][i+3]-mtime1_err_corr[m][a][i];

		    if(  (slopeSpike<0 && oldslopeSpike>0) &&
		       (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i])  >getSpikeThreshold1()) &&
		       (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+1])>getSpikeThreshold1()) &&
		       (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+2])>getSpikeThreshold1()) &&
		       (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+3])<getSpikeThreshold2()) &&
		       i<96)
		    { // 3 bin spike

			if(getPrintMode())cout<<"     3bin "<<i
			    <<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
				<<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
				<<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
				<<"\n      y[i+2] "<<mtime1_err_corr[m][a][i+2]
				<<"\n      y[i+3] "<<mtime1_err_corr[m][a][i+3]
				<<endl;

			mtime1_err_corr[m][a][i]  =mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+3])*0.25;
			mtime1_err_corr[m][a][i+1]=mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+3])*0.25*2;
			mtime1_err_corr[m][a][i+2]=mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+3])*0.25*3;

			if(getPrintMode())cout<<"     3bin "<<i
			    <<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
				<<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
				<<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
				<<"\n      y[i+2] "<<mtime1_err_corr[m][a][i+2]
				<<"\n      y[i+3] "<<mtime1_err_corr[m][a][i+3]
				<<endl;
		    }

		    if(i<96)
		    {
			oldslopeSpike= mtime1_err_corr[m][a][i]  -mtime1_err_corr[m][a][i-1];
			slopeSpike   = mtime1_err_corr[m][a][i+4]-mtime1_err_corr[m][a][i];

			if(  (slopeSpike<0 && oldslopeSpike>0) &&
			   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i])  >getSpikeThreshold1()) &&
			   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+1])>getSpikeThreshold1()) &&
			   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+2])>getSpikeThreshold1()) &&
			   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+3])>getSpikeThreshold1()) &&
			   (fabs(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+4])<getSpikeThreshold2()) &&
			   i<95)
			{ // 4 bin spike

			    if(getPrintMode())cout<<"     4bin "<<i
				<<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
				    <<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
				    <<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
				    <<"\n      y[i+2] "<<mtime1_err_corr[m][a][i+2]
				    <<"\n      y[i+3] "<<mtime1_err_corr[m][a][i+3]
				    <<"\n      y[i+4] "<<mtime1_err_corr[m][a][i+4]
				    <<endl;

			    mtime1_err_corr[m][a][i]  =mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+4])*0.2;
			    mtime1_err_corr[m][a][i+1]=mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+4])*0.2*2;
			    mtime1_err_corr[m][a][i+2]=mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+4])*0.2*3;
			    mtime1_err_corr[m][a][i+3]=mtime1_err_corr[m][a][i-1]-(mtime1_err_corr[m][a][i-1]-mtime1_err_corr[m][a][i+4])*0.2*4;

			    if(getPrintMode())cout<<"     4bin "<<i
				<<"\n      y[i-1] "<<mtime1_err_corr[m][a][i-1]
				    <<"\n      y[i]   "<<mtime1_err_corr[m][a][i]
				    <<"\n      y[i+1] "<<mtime1_err_corr[m][a][i+1]
				    <<"\n      y[i+2] "<<mtime1_err_corr[m][a][i+2]
				    <<"\n      y[i+3] "<<mtime1_err_corr[m][a][i+3]
				    <<"\n      y[i+4] "<<mtime1_err_corr[m][a][i+4]
				    <<endl;
			}
		    } //<96
		} // <97
	    } // <98
	}
    }
    if(!getPrintMode())cout<<" "<<endl;
}

void HMdcGarCal2Maker::copyToHist(TH1F* h,Int_t m,Int_t a,Int_t type)
{
    // Copys workings arrays to hists
    if(type==0)for(Int_t i=0;i<100;i++){
	h->SetBinContent(i+1,mtime1_corr    [m][a][i]);
    }
    if(type==1)for(Int_t i=0;i<100;i++){
	h->SetBinContent(i+1,mtime1_err_corr[m][a][i]);
    }
    if(type==2)for(Int_t i=0;i<100;i++){
	h->SetBinContent(i+1,mtime2_corr    [m][a][i]);
    }
    if(type==3)for(Int_t i=0;i<100;i++){
	h->SetBinContent(i+1,mtime2_err_corr[m][a][i]);
    }
}
void HMdcGarCal2Maker::copyToArray(TH1F* h,Int_t m,Int_t a,Int_t type)
{
    // Copy working hists to arrays
    if(type==0)for(Int_t i=0;i<100;i++){
	mtime1_corr    [m][a][i]=h->GetBinContent(i+1);

	if(mtime1_corr[m][a][i]==0&& i<1)
	{
	    Warning("HMdcGarCal2Maker::copyToArray()",
		    "Bin content 0 in time 1 of %i %02i %02i",m,a,i);
	}
    }
    if(type==1)for(Int_t i=0;i<100;i++){
	mtime1_err_corr[m][a][i]=h->GetBinContent(i+1);

	if(mtime1_err_corr[m][a][i]==0)
	{
	    Warning("HMdcGarCal2Maker::copyToArray()",
		    "Bin content 0 in time1 err of %i %02i %02i",m,a,i);
	}
    }
    if(type==2)for(Int_t i=0;i<100;i++){
	mtime2_corr    [m][a][i]=h->GetBinContent(i+1);

	if(mtime2_corr[m][a][i]==0)
	{
	    Warning("HMdcGarCal2Maker::copyToArray()",
		    "Bin content 0 in time2  of %i %02i %02i",m,a,i);
	}
    }
    if(type==3)for(Int_t i=0;i<100;i++){
	mtime2_err_corr[m][a][i]=h->GetBinContent(i+1);

	if(mtime2_err_corr[m][a][i]==0)
	{
	    Warning("HMdcGarCal2Maker::copyToArray()",
		    "Bin content 0 in time2 err  of %i %02i %02i",m,a,i);
	}
    }
}
Float_t HMdcGarCal2Maker::coefSavGol2(Int_t i, Int_t j, Int_t k, Int_t ni, Int_t nj, Int_t nk) {
    //
    // Compute 2nd order Savitzky-Golay polynomial coefficient c=c(i,j,k,ni,nj,nk)
    //
    if (abs(i)>ni || abs(j)>nj || abs(k)>nk) return 0.;
    Float_t Nijk = (2*ni+1)*(2*nj+1)*(2*nk+1);
    Float_t gi = (ni*(ni+1))/3.;
    Float_t gj = (nj*(nj+1))/3.;
    Float_t gk = (nk*(nk+1))/3.;
    Float_t termi = 5.*((Float_t)(i*i)-gi)/(4.*gi-1.);
    Float_t termj = 5.*((Float_t)(j*j)-gj)/(4.*gj-1.);
    Float_t termk = 5.*((Float_t)(k*k)-gk)/(4.*gk-1.);
    return (1.-termi-termj-termk)/Nijk;
}

void HMdcGarCal2Maker::do2dSavitzkyGolayFiltering(Float_t *data, Int_t xchan, Int_t ychan, Bool_t clip) {
    //
    // Do a 2dim symmetric second-order Savitzky-Golay noise filtering on data
    //
    //   - 2dim, because data=data(i,j)
    //   - symmetric, because nR = nL = n
    //   - second-order, because m=2
    //
    Int_t n=2;                          // fix filter window to [-2,2]
    Float_t work[xchan][ychan];         // temporary work matrix
    Float_t c[2*n+1][2*n+1];            // coefficient matrix

    Float_t sum = 0.;
    for(Int_t i=-n; i<=n; i++) {        // tabulate filter coefficients
	for(Int_t j=-n; j<=n; j++) {
	    sum += c[i+n][j+n] = coefSavGol2(i,j,0,n,n,0);
	}
    }
    if(sum != 1){
	cout << "Sum of Savitzky-Golay coefficients Not 1 : " << sum <<endl;
    }
    Float_t val;
    Int_t ic, jc;
    for(Int_t i=n; i<xchan-n; i++) {     // loop over data
	for(Int_t j=n; j<ychan-n; j++) {   // and filter
	    val = 0;
	    ic = -n;
	    for(Int_t ip=i-n; ip<=i+n; ip++, ic++) {
		jc = -n;
		for(Int_t jp=j-n; jp<=j+n; jp++, jc++) {
		    val += c[ic+n][jc+n]*data[ip*ychan+jp];
		}
	    }
	    work[i][j] = val;
	}
    }

    for(Int_t i=n; i<xchan-n; i++) {    // clip and copy back filtered data
	for(Int_t j=n; j<ychan-n; j++) {
	    if (clip) data[i*ychan+j] = TMath::Max(TMath::Min(work[i][j],1.0F),0.F);
	    else data[i*ychan+j] = work[i][j];
	}
    }

    return;
}

void HMdcGarCal2Maker::smoothHist(TH1F* h,Int_t type)
{
    // Smooth working hists by number of cycles defined
    if(type==0) {
	HTool::smooth(h,getNTimes(type));
	HTool::smooth(h,1000,1,10);
    }
    if(type==1) HTool::smooth(h,getNTimes(type));
    if(type==2) HTool::smooth(h,getNTimes(type));
    //if(type==3) HTool::smooth(h,getNTimes(type));
}
void HMdcGarCal2Maker::fitHist(TH1F* h,Int_t mdc,Int_t a, Int_t type)
{
    // Smooth time1 errors by fit function

    Float_t cellEdge;
    Float_t maxDist;
    Int_t   nrange   = 0;
    calcBounderies(mdc,a,&cellEdge,&maxDist);
    TF1* fit = 0;

    if(type == 0){
        // for time1 replace the firts 3 bins by fit values

	nrange = 11;
	fit = new TF1("fit","pol2");

	Float_t x1,x2;
	x1 = h->GetXaxis()->GetBinCenter( 3);
	x2 = h->GetXaxis()->GetBinCenter( nrange + 1);
	fit->SetRange(x1,x2);
	h->Fit(fit,"NQR");

	for(Int_t bin = 0; bin < 3; bin ++)
	{   // now replace the bin in range by fitted values
	    h->SetBinContent(bin + 1,fit->Eval(h->GetXaxis()->GetBinCenter(bin+1)));
	}

    }

    if(type == 1){

        nrange = (Int_t)(cellEdge*1.*10*.3);	fit = new TF1("fit","pol2");

	Float_t x1,x2;
	x1 = h->GetXaxis()->GetBinCenter(1);
	x2 = h->GetXaxis()->GetBinCenter(nrange + 1);
	fit->SetRange(x1,x2);
	h->Fit(fit,"NQR");

	for(Int_t bin = 0; bin <= nrange; bin ++)
	{   // now replace the bin in range by fitted values
	    h->SetBinContent(bin + 1,fit->Eval(h->GetXaxis()->GetBinCenter(bin+1)));
	}
    }
    delete fit;
}
void HMdcGarCal2Maker::replaceBins(TH1F* h,Int_t m,Int_t a,Int_t type)
{
    // Replace the first bins and the bins after the maximum bin of the
    // workings hists after smoothing by the original bins of the working arrays.
    if(type==1)
    {
	for(Int_t i=0;i<100;i++){ // do not allow over shoot
	    if(h->GetBinContent(i+1)>getMaxErrTime1()){
		h->SetBinContent(i+1,getMaxErrTime1());
	    }
	}
    }
    if(type==2)
    {
	for(Int_t i=0;i<getMaxCopy();i++){// first bins
	    h->SetBinContent(i+1,mtime2_corr[m][a][i]);
	}
        for(Int_t i=getMinCopy();i<100;i++){// bins after max
	    h->SetBinContent(i+1,mtime2_corr[m][a][i]);
	}
    }
}
void HMdcGarCal2Maker::createGraph(Int_t m,Int_t t,Int_t l)
{
    // Create Graphs , fill them with the working array and write
    // them to disk
    gStyle->SetPalette(50);
    Float_t x[100];
    Float_t y[100];

    TDirectory *dirTemp=NULL;

    if(getWriteHists())
    {
	outputHists->cd();
	if (outputHists) dirTemp=HTool::Mkdir(outputHists, "module",m);
    }

    for(Int_t a=0;a<18;a++){
	if(t==0)for(Int_t i=0;i<100;i++){
	    y[i]=mtime1_corr[m][a][i];
	    x[i]=0.1*i;
	}
	if(t==1)for(Int_t i=0;i<100;i++){
	    y[i]=mtime1_err_corr[m][a][i];
	    x[i]=0.1*i;
	}
	if(t==2)for(Int_t i=0;i<100;i++){
	    y[i]=mtime2_corr[m][a][i];
	    x[i]=0.1*i;
	}
	if(t==3)for(Int_t i=0;i<100;i++){
	    y[i]=mtime2_err_corr[m][a][i];
	    x[i]=0.1*i;
	}

	Char_t namegraph[300];

	sprintf(namegraph,"%s%i%s%02i%s%i%s%i%s","g[",m,"][",a,"][",t,"][",l,"]");
	g[m][a][t][l]=new TGraph(100,x,y);
	g[m][a][t][l]->SetName(namegraph);
	g[m][a][t][l]->SetLineColor(getLevelColors(l));

	if(getWriteHists())
	{
	    HTool::writeObject(g[m][a][t][l]);
	}
    }
    if(getWriteHists())
    {
	dirTemp->TDirectory::Cd("..");
    }
}
void HMdcGarCal2Maker::fillControl2D(Int_t mdctype,Int_t type,TString context)
{
    // Fills a 2D Control hist from the working arrays and writes the hist to disk.
    if(type==0)cout<<"HMdcGarCal2Maker::fillControl2D() : Filling Hist for MDC"<<mdctype<<" time1"<<endl;
    if(type==1)cout<<"HMdcGarCal2Maker::fillControl2D() : Filling Hist for MDC"<<mdctype<<" error time1"<<endl;
    if(type==2)cout<<"HMdcGarCal2Maker::fillControl2D() : Filling Hist for MDC"<<mdctype<<" time1"<<endl;
    if(type==3)cout<<"HMdcGarCal2Maker::fillControl2D() : Filling Hist for MDC"<<mdctype<<" error time1"<<endl;


    if(getWriteHists()) outputHists->cd();

    gStyle->SetPalette(1);
    if(getBatchMode())gROOT->SetBatch();

    Char_t namecanvas[300];
    TString histtype;
    if(type==0)histtype="2D time1";
    if(type==1)histtype="2D error of time1";
    if(type==2)histtype="2D time2";
    if(type==3)histtype="2D error of time2";

    sprintf(namecanvas,"%s%s%i%s%s",histtype.Data()," for MDC",mdctype," after ",context.Data());
    TCanvas *result =new TCanvas(namecanvas ,namecanvas,1000,800);
    result->cd();
    result->Draw();

    Char_t namematrix[200];

    if(type==0)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t1_",context.Data());
    if(type==1)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t1err_",context.Data());
    if(type==2)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t2_",context.Data());
    if(type==3)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t2err_",context.Data());

    TH2F* hmatrix;

    Char_t nameHist[200];
    sprintf(nameHist,"%s%i%s%i%s%s","hmatrix[",mdctype,"][",type,"]_",context.Data());

    hmatrix=new TH2F(nameHist,namematrix,getNBin2D_Angle(),0,getNBin2D_Angle(),getNBin2D_Dist(),0,getNBin2D_Dist()*0.1);
    hmatrix->SetXTitle("angle [step(5 degree)]");
    hmatrix->SetYTitle("distance from wire [mm]");
    hmatrix->SetOption("lego2");

    if(type==0 || type==2)hmatrix->SetZTitle("drift time [ns]");
    if(type==1 || type==3)hmatrix->SetZTitle("error of drift time [ns]");

    hmatrix->SetLabelSize(0.03,"x");
    hmatrix->SetLabelSize(0.03,"y");
    hmatrix->SetLabelSize(0.03,"z");
    hmatrix->SetTitleOffset(1.5,"x");
    hmatrix->SetTitleOffset(1.5,"y");
    hmatrix->SetTitleOffset(1. ,"z");

    for(Int_t angle=0;angle<18;angle++)
    {
	for(Int_t sample=0;sample<100;sample++)
	{
	    if(type==0)hmatrix->SetBinContent(angle+1,sample+1,mtime1_corr    [mdctype][angle][sample]);
	    if(type==1)hmatrix->SetBinContent(angle+1,sample+1,mtime1_err_corr[mdctype][angle][sample]);
	    if(type==2)hmatrix->SetBinContent(angle+1,sample+1,mtime2_corr    [mdctype][angle][sample]);
	    if(type==3)hmatrix->SetBinContent(angle+1,sample+1,mtime2_err_corr[mdctype][angle][sample]);
	}
    }
    hmatrix->DrawCopy();

    if(getWriteHists())
    {
	HTool::writeObject(hmatrix);
    }

    HTool::deleteObject(hmatrix);
}
void HMdcGarCal2Maker::fillControl1D(Int_t mdctype,Int_t type,TString context)
{
    // Fills 1D Control hists (for each impact angle) and writes the hists to disk.
    if(type==0)cout<<"HMdcGarCal2Maker::fillControl1D() : Filling Hist for MDC"<<mdctype<<" time1"<<endl;
    if(type==1)cout<<"HMdcGarCal2Maker::fillControl1D() : Filling Hist for MDC"<<mdctype<<" error time1"<<endl;
    if(type==2)cout<<"HMdcGarCal2Maker::fillControl1D() : Filling Hist for MDC"<<mdctype<<" time1"<<endl;
    if(type==3)cout<<"HMdcGarCal2Maker::fillControl1D() : Filling Hist for MDC"<<mdctype<<" error time1"<<endl;

    TDirectory *dirTemp=NULL;

    if(getWriteHists())
    {
	outputHists->cd();
	if (outputHists) dirTemp=HTool::Mkdir(outputHists, "module",mdctype);
    }
    gStyle->SetPalette(50);
    if(getBatchMode())gROOT->SetBatch();

    Char_t namecanvas[300];
    TString histtype;
    if(type==0)histtype="1D time1";
    if(type==1)histtype="1D error of time1";
    if(type==2)histtype="1D time2";
    if(type==3)histtype="1D error of time2";

    sprintf(namecanvas,"%s%s%i%s%s",histtype.Data()," for MDC",mdctype," after ",context.Data());
    TCanvas *result =new TCanvas(namecanvas ,namecanvas,1000,800);
    result->Divide(6,3);
    result->cd();
    result->Draw();

    Char_t namematrix[200];

    if(type==0)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t1_"   ,context.Data());
    if(type==1)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t1err_",context.Data());
    if(type==2)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t2_"   ,context.Data());
    if(type==3)sprintf(namematrix,"%s%i%s%s","MDC",mdctype,"_t2err_",context.Data());

    TH1F* h[18];

    Char_t nameHist[200];
 
    for(Int_t angle=0;angle<18;angle++)
    {
	sprintf(nameHist,"%s%i%s%i%s%02i%s%s","h[",mdctype,"][",type,"][",angle,"]_",context.Data());

	//h[angle]=new TH1F(nameHist,namematrix,15,0,15*0.1);
	h[angle]=new TH1F(nameHist,namematrix,getNBin1D_Dist(),0,getNBin1D_Dist()*0.1);
	h[angle]->SetYTitle("distance from wire [mm]");
	h[angle]->SetMarkerStyle(8);
	h[angle]->SetMarkerSize(0.5);

	h[angle]->SetOption("LP");
       
      
	if(type==0 || type==1)h[angle]->SetMarkerColor(2);
        if(type==2 || type==3)h[angle]->SetMarkerColor(4);
	if(type==0 || type==2)h[angle]->SetYTitle("drift time [ns]");
	if(type==1 || type==3)h[angle]->SetYTitle("error of drift time [ns]");

	for(Int_t sample=0;sample<100;sample++)
	{
	    if(type==0)h[angle]->SetBinContent(sample+1,mtime1_corr    [mdctype][angle][sample]);
	    if(type==1)h[angle]->SetBinContent(sample+1,mtime1_err_corr[mdctype][angle][sample]);
	    if(type==2)h[angle]->SetBinContent(sample+1,mtime2_corr    [mdctype][angle][sample]);
	    if(type==3)h[angle]->SetBinContent(sample+1,mtime2_err_corr[mdctype][angle][sample]);
	}
        result->cd(angle+1);

	if(type==1||type==3)h[angle]->SetMaximum(100);
        if(type==0||type==2)h[angle]->SetMaximum(1000); // 1000

	h[angle]->DrawCopy();
        h[angle]->SetOption("");
	h[angle]->DrawCopy("same");

	drawBorders(mdctype,angle,type);

	if(getWriteHists())
	{
	    HTool::writeObject(h[angle]);
	}
	HTool::deleteObject(h[angle]);
    }
    if(getWriteHists())
    {
	HTool::writeObject(result);
	dirTemp->TDirectory::Cd("..");
    }
}
void HMdcGarCal2Maker::plotOverlay(Int_t mdctype,Int_t type)
{
    // Plots overlay of Graphs after the differrent working steps
    // (raw, spike remove, smooth and replacement of bins).
    if(type==0)cout<<"HMdcGarCal2Maker::plotOverLay()   : Overlaying Graphs for MDC"<<mdctype<<" time1"<<endl;
    if(type==1)cout<<"HMdcGarCal2Maker::plotOverLay()   : Overlaying Graphs for MDC"<<mdctype<<" error time1"<<endl;
    if(type==2)cout<<"HMdcGarCal2Maker::plotOverLay()   : Overlaying Graphs for MDC"<<mdctype<<" time1"<<endl;
    if(type==3)cout<<"HMdcGarCal2Maker::plotOverLay()   : Overlaying Graphs for MDC"<<mdctype<<" error time1"<<endl;

    gStyle->SetOptStat(0);
    gStyle->SetOptTitle(0);

    TH1F* dummy=new TH1F("dummy","",getNBin1D_Dist(),0,getNBin1D_Dist()*0.1);
    if(type==0||type==2)dummy->SetMaximum(1000);
    if(type==1||type==3)dummy->SetMaximum(100);

    TDirectory *dirTemp=NULL;

    if(getWriteHists())
    {
	outputHists->cd();
	if (outputHists) dirTemp=HTool::Mkdir(outputHists, "module",mdctype);
    }
    gStyle->SetPalette(50);
    if(getBatchMode())gROOT->SetBatch();

    Char_t namecanvas[300];
    TString histtype;
    if(type==0)histtype="Overlay 1D time1";
    if(type==1)histtype="Overlay 1D error of time1";
    if(type==2)histtype="Overlay 1D time2";
    if(type==3)histtype="Overlay 1D error of time2";

    sprintf(namecanvas,"%s%s%i",histtype.Data()," for MDC",mdctype);
    TCanvas *result =new TCanvas(namecanvas ,namecanvas,1000,800);
    result->Divide(6,3);
    result->cd();
    result->Draw();
    for(Int_t angle=0;angle<18;angle++)
    {
	result->cd(angle+1);
        dummy->DrawCopy();
	for(Int_t l=0;l<3;l++)
	{
	    if(g[mdctype][angle][type][l])
	    {
		g[mdctype][angle][type][l]->SetLineColor(getLevelColors(l));
		g[mdctype][angle][type][l]->Draw();
	    }
	}
        drawBorders(mdctype,angle,type);
    }
    if(getWriteHists())
    {
	HTool::writeObject(result);
	dirTemp->TDirectory::Cd("..");
    }
    HTool::deleteObject(dummy);
}
void HMdcGarCal2Maker::drawBorders(Int_t mdctype,Int_t angle,Int_t type)
{
    // Draw lines for max value of Celledge / max distance
    Float_t celledge,maxDist;
    calcBounderies(mdctype,angle,&celledge,&maxDist);
    Float_t upperY=0;
    if(type==1||type==3)upperY=100;
    if(type==0||type==2)upperY=1000;

    TLine *edge=new TLine(celledge,0,celledge,upperY);
    edge->SetLineColor(4);
    edge->Draw("same");

    TLine *maxdist=new TLine(maxDist,0,maxDist,upperY);
    maxdist->SetLineColor(2);
    maxdist->Draw("same");
}
void HMdcGarCal2Maker::writeAscii()
{
    // Writes the created parameters form the working arrays to an ascii file.
    if(getWriteAscii())
    {

	cout<<"HMdcGarCal2Maker::writeAscii()    : Write output ascii file"<<endl;

	output=fopen(fNameAsciiOut,"w");

	Char_t tag[60];
	sprintf(tag,"%s","[MdcCal2ParSim]\n");
	fprintf(output,"############################################################################\n");
	fprintf(output,"# HMdcCal2ParSim\n");
	fprintf(output,"%s%i%s%i%s%i%s%i%s","# GARFIELD voltage ",getVoltage(0),", ",getVoltage(1),", ",getVoltage(2),", ",getVoltage(3),"\n");
	fprintf(output,"%s%i%s","# threshold ",getStepSize()*getThreshold()," %\n");
	fprintf(output,"%s%3.1f%s%3.1f%s%3.1f%s%3.1f%s","# cut at ",getCutMax(0),", ",getCutMax(1),", ",getCutMax(2),", ",getCutMax(3)," ns\n");
	fprintf(output,"# format type:0=time1, 1=variation time1, 2=time2, 3=variation time2\n");
	fprintf(output,"# sector module angle type par0 par1 par2 par3 par4 par5 par6 par7 par8 par9 \n");
	fprintf(output,"############################################################################\n");
	fprintf(output,"%s\n",tag);
	for(Int_t sector=0;sector<6;sector++)
	{
	    for(Int_t mdctype=0;mdctype<4;mdctype++)
	    {
		for(Int_t angle=0;angle<18;angle++)  // 0-17 from 0 to 85 impactc angle
		{
		    for(Int_t type=0;type<4;type++)  // time1,variation time1,time2, varitation time2
		    {
			for(Int_t dist=0;dist<10;dist++)  // 10*10 steps=100
			{
			    fprintf(output,"%i %i %2i %2i ",
				    sector,mdctype,angle,type);
			    if(type==0)
			    {
				fprintf(output,"%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f \n",
					mtime1_corr[mdctype][angle][dist*10 + 0],mtime1_corr[mdctype][angle][dist*10 + 1],
					mtime1_corr[mdctype][angle][dist*10 + 2],mtime1_corr[mdctype][angle][dist*10 + 3],
					mtime1_corr[mdctype][angle][dist*10 + 4],mtime1_corr[mdctype][angle][dist*10 + 5],
					mtime1_corr[mdctype][angle][dist*10 + 6],mtime1_corr[mdctype][angle][dist*10 + 7],
					mtime1_corr[mdctype][angle][dist*10 + 8],mtime1_corr[mdctype][angle][dist*10 + 9]);
			    }
			    if(type==1)
			    {
				fprintf(output,"%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f \n",
					mtime1_err_corr[mdctype][angle][dist*10 + 0],mtime1_err_corr[mdctype][angle][dist*10 + 1],
					mtime1_err_corr[mdctype][angle][dist*10 + 2],mtime1_err_corr[mdctype][angle][dist*10 + 3],
					mtime1_err_corr[mdctype][angle][dist*10 + 4],mtime1_err_corr[mdctype][angle][dist*10 + 5],
					mtime1_err_corr[mdctype][angle][dist*10 + 6],mtime1_err_corr[mdctype][angle][dist*10 + 7],
					mtime1_err_corr[mdctype][angle][dist*10 + 8],mtime1_err_corr[mdctype][angle][dist*10 + 9]);
			    }
			    if(type==2)
			    {
				fprintf(output,"%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f \n",
					mtime2_corr[mdctype][angle][dist*10 + 0],mtime2_corr[mdctype][angle][dist*10 + 1],
					mtime2_corr[mdctype][angle][dist*10 + 2],mtime2_corr[mdctype][angle][dist*10 + 3],
					mtime2_corr[mdctype][angle][dist*10 + 4],mtime2_corr[mdctype][angle][dist*10 + 5],
					mtime2_corr[mdctype][angle][dist*10 + 6],mtime2_corr[mdctype][angle][dist*10 + 7],
					mtime2_corr[mdctype][angle][dist*10 + 8],mtime2_corr[mdctype][angle][dist*10 + 9]);
			    }
			    if(type==3)
			    {
				fprintf(output,"%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f \n",
					mtime2_err_corr[mdctype][angle][dist*10 + 0],mtime2_err_corr[mdctype][angle][dist*10 + 1],
					mtime2_err_corr[mdctype][angle][dist*10 + 2],mtime2_err_corr[mdctype][angle][dist*10 + 3],
					mtime2_err_corr[mdctype][angle][dist*10 + 4],mtime2_err_corr[mdctype][angle][dist*10 + 5],
					mtime2_err_corr[mdctype][angle][dist*10 + 6],mtime2_err_corr[mdctype][angle][dist*10 + 7],
					mtime2_err_corr[mdctype][angle][dist*10 + 8],mtime2_err_corr[mdctype][angle][dist*10 + 9]);
			    }
			}
		    }
		}
	    }
	}
	fprintf(output,"############################################################################\n");
	fclose(output);
    }
    else
    {
	cout<<"HMdcGarCal2Maker::writeAscii()    : No ascii file written"<<endl;
    }
}
void HMdcGarCal2Maker::readInput()
{
    // Reads input file to get the hists for time1 and time2 produced by
    // HMdcGarSignalReader.
    gROOT->Reset();

    if(!HTool::open(&inputRoot,fNameRootIn,"READ"))
    {
	exit(1);
    }
    inputRoot->cd();

    Char_t namepath[300];
    Char_t namehist[300];

    for(Int_t mdctype=0;mdctype<4;mdctype++) {
        if(!check(mdctype,-99))continue;
	cout<<"mdc "<<mdctype<<" :"<<flush;
	for(Int_t angle=0;angle<18;angle++) {
	    cout<<" "<<angle*5<<flush;

	    if(getVersion()==1)sprintf(namepath,"%s%02i%s%02i%s","mdc ",mdctype,"/angle ",angle*5,"/");
            if(getVersion()==2)sprintf(namepath,"%s%i%s%02i%s","mdc ",mdctype,"/angle ",angle*5,"/");

	    sprintf(namehist,"%s%s%i%s%02i%s%02i%s",namepath,"hmeandrift_time1[",mdctype,"][",getThreshold(),"][",angle*5,"]");
	    htime1=(TH1F*) (inputRoot->Get(namehist));

	    if(getVersion()==1)sprintf(namepath,"%s%02i%s%02i%s","mdc ",mdctype,"/angle ",angle*5,"/");
            if(getVersion()==2)sprintf(namepath,"%s%i%s%02i%s","mdc ",mdctype,"/angle ",angle*5,"/");

	    sprintf(namehist,"%s%s%i%s%02i%s%02i%s",namepath,"hmeandrift_time2[",mdctype,"][",getThreshold(),"][",angle*5,"]");
	    htime2=(TH1F*) (inputRoot->Get(namehist));

	    fillArrays(htime1,htime2,mdctype,angle);

	    HTool::deleteObject(htime1);
	    HTool::deleteObject(htime2);
	}
        cout<<" "<<endl;
    }
    HTool::close(&inputRoot);
}
 hmdcgarcal2maker.cc:1
 hmdcgarcal2maker.cc:2
 hmdcgarcal2maker.cc:3
 hmdcgarcal2maker.cc:4
 hmdcgarcal2maker.cc:5
 hmdcgarcal2maker.cc:6
 hmdcgarcal2maker.cc:7
 hmdcgarcal2maker.cc:8
 hmdcgarcal2maker.cc:9
 hmdcgarcal2maker.cc:10
 hmdcgarcal2maker.cc:11
 hmdcgarcal2maker.cc:12
 hmdcgarcal2maker.cc:13
 hmdcgarcal2maker.cc:14
 hmdcgarcal2maker.cc:15
 hmdcgarcal2maker.cc:16
 hmdcgarcal2maker.cc:17
 hmdcgarcal2maker.cc:18
 hmdcgarcal2maker.cc:19
 hmdcgarcal2maker.cc:20
 hmdcgarcal2maker.cc:21
 hmdcgarcal2maker.cc:22
 hmdcgarcal2maker.cc:23
 hmdcgarcal2maker.cc:24
 hmdcgarcal2maker.cc:25
 hmdcgarcal2maker.cc:26
 hmdcgarcal2maker.cc:27
 hmdcgarcal2maker.cc:28
 hmdcgarcal2maker.cc:29
 hmdcgarcal2maker.cc:30
 hmdcgarcal2maker.cc:31
 hmdcgarcal2maker.cc:32
 hmdcgarcal2maker.cc:33
 hmdcgarcal2maker.cc:34
 hmdcgarcal2maker.cc:35
 hmdcgarcal2maker.cc:36
 hmdcgarcal2maker.cc:37
 hmdcgarcal2maker.cc:38
 hmdcgarcal2maker.cc:39
 hmdcgarcal2maker.cc:40
 hmdcgarcal2maker.cc:41
 hmdcgarcal2maker.cc:42
 hmdcgarcal2maker.cc:43
 hmdcgarcal2maker.cc:44
 hmdcgarcal2maker.cc:45
 hmdcgarcal2maker.cc:46
 hmdcgarcal2maker.cc:47
 hmdcgarcal2maker.cc:48
 hmdcgarcal2maker.cc:49
 hmdcgarcal2maker.cc:50
 hmdcgarcal2maker.cc:51
 hmdcgarcal2maker.cc:52
 hmdcgarcal2maker.cc:53
 hmdcgarcal2maker.cc:54
 hmdcgarcal2maker.cc:55
 hmdcgarcal2maker.cc:56
 hmdcgarcal2maker.cc:57
 hmdcgarcal2maker.cc:58
 hmdcgarcal2maker.cc:59
 hmdcgarcal2maker.cc:60
 hmdcgarcal2maker.cc:61
 hmdcgarcal2maker.cc:62
 hmdcgarcal2maker.cc:63
 hmdcgarcal2maker.cc:64
 hmdcgarcal2maker.cc:65
 hmdcgarcal2maker.cc:66
 hmdcgarcal2maker.cc:67
 hmdcgarcal2maker.cc:68
 hmdcgarcal2maker.cc:69
 hmdcgarcal2maker.cc:70
 hmdcgarcal2maker.cc:71
 hmdcgarcal2maker.cc:72
 hmdcgarcal2maker.cc:73
 hmdcgarcal2maker.cc:74
 hmdcgarcal2maker.cc:75
 hmdcgarcal2maker.cc:76
 hmdcgarcal2maker.cc:77
 hmdcgarcal2maker.cc:78
 hmdcgarcal2maker.cc:79
 hmdcgarcal2maker.cc:80
 hmdcgarcal2maker.cc:81
 hmdcgarcal2maker.cc:82
 hmdcgarcal2maker.cc:83
 hmdcgarcal2maker.cc:84
 hmdcgarcal2maker.cc:85
 hmdcgarcal2maker.cc:86
 hmdcgarcal2maker.cc:87
 hmdcgarcal2maker.cc:88
 hmdcgarcal2maker.cc:89
 hmdcgarcal2maker.cc:90
 hmdcgarcal2maker.cc:91
 hmdcgarcal2maker.cc:92
 hmdcgarcal2maker.cc:93
 hmdcgarcal2maker.cc:94
 hmdcgarcal2maker.cc:95
 hmdcgarcal2maker.cc:96
 hmdcgarcal2maker.cc:97
 hmdcgarcal2maker.cc:98
 hmdcgarcal2maker.cc:99
 hmdcgarcal2maker.cc:100
 hmdcgarcal2maker.cc:101
 hmdcgarcal2maker.cc:102
 hmdcgarcal2maker.cc:103
 hmdcgarcal2maker.cc:104
 hmdcgarcal2maker.cc:105
 hmdcgarcal2maker.cc:106
 hmdcgarcal2maker.cc:107
 hmdcgarcal2maker.cc:108
 hmdcgarcal2maker.cc:109
 hmdcgarcal2maker.cc:110
 hmdcgarcal2maker.cc:111
 hmdcgarcal2maker.cc:112
 hmdcgarcal2maker.cc:113
 hmdcgarcal2maker.cc:114
 hmdcgarcal2maker.cc:115
 hmdcgarcal2maker.cc:116
 hmdcgarcal2maker.cc:117
 hmdcgarcal2maker.cc:118
 hmdcgarcal2maker.cc:119
 hmdcgarcal2maker.cc:120
 hmdcgarcal2maker.cc:121
 hmdcgarcal2maker.cc:122
 hmdcgarcal2maker.cc:123
 hmdcgarcal2maker.cc:124
 hmdcgarcal2maker.cc:125
 hmdcgarcal2maker.cc:126
 hmdcgarcal2maker.cc:127
 hmdcgarcal2maker.cc:128
 hmdcgarcal2maker.cc:129
 hmdcgarcal2maker.cc:130
 hmdcgarcal2maker.cc:131
 hmdcgarcal2maker.cc:132
 hmdcgarcal2maker.cc:133
 hmdcgarcal2maker.cc:134
 hmdcgarcal2maker.cc:135
 hmdcgarcal2maker.cc:136
 hmdcgarcal2maker.cc:137
 hmdcgarcal2maker.cc:138
 hmdcgarcal2maker.cc:139
 hmdcgarcal2maker.cc:140
 hmdcgarcal2maker.cc:141
 hmdcgarcal2maker.cc:142
 hmdcgarcal2maker.cc:143
 hmdcgarcal2maker.cc:144
 hmdcgarcal2maker.cc:145
 hmdcgarcal2maker.cc:146
 hmdcgarcal2maker.cc:147
 hmdcgarcal2maker.cc:148
 hmdcgarcal2maker.cc:149
 hmdcgarcal2maker.cc:150
 hmdcgarcal2maker.cc:151
 hmdcgarcal2maker.cc:152
 hmdcgarcal2maker.cc:153
 hmdcgarcal2maker.cc:154
 hmdcgarcal2maker.cc:155
 hmdcgarcal2maker.cc:156
 hmdcgarcal2maker.cc:157
 hmdcgarcal2maker.cc:158
 hmdcgarcal2maker.cc:159
 hmdcgarcal2maker.cc:160
 hmdcgarcal2maker.cc:161
 hmdcgarcal2maker.cc:162
 hmdcgarcal2maker.cc:163
 hmdcgarcal2maker.cc:164
 hmdcgarcal2maker.cc:165
 hmdcgarcal2maker.cc:166
 hmdcgarcal2maker.cc:167
 hmdcgarcal2maker.cc:168
 hmdcgarcal2maker.cc:169
 hmdcgarcal2maker.cc:170
 hmdcgarcal2maker.cc:171
 hmdcgarcal2maker.cc:172
 hmdcgarcal2maker.cc:173
 hmdcgarcal2maker.cc:174
 hmdcgarcal2maker.cc:175
 hmdcgarcal2maker.cc:176
 hmdcgarcal2maker.cc:177
 hmdcgarcal2maker.cc:178
 hmdcgarcal2maker.cc:179
 hmdcgarcal2maker.cc:180
 hmdcgarcal2maker.cc:181
 hmdcgarcal2maker.cc:182
 hmdcgarcal2maker.cc:183
 hmdcgarcal2maker.cc:184
 hmdcgarcal2maker.cc:185
 hmdcgarcal2maker.cc:186
 hmdcgarcal2maker.cc:187
 hmdcgarcal2maker.cc:188
 hmdcgarcal2maker.cc:189
 hmdcgarcal2maker.cc:190
 hmdcgarcal2maker.cc:191
 hmdcgarcal2maker.cc:192
 hmdcgarcal2maker.cc:193
 hmdcgarcal2maker.cc:194
 hmdcgarcal2maker.cc:195
 hmdcgarcal2maker.cc:196
 hmdcgarcal2maker.cc:197
 hmdcgarcal2maker.cc:198
 hmdcgarcal2maker.cc:199
 hmdcgarcal2maker.cc:200
 hmdcgarcal2maker.cc:201
 hmdcgarcal2maker.cc:202
 hmdcgarcal2maker.cc:203
 hmdcgarcal2maker.cc:204
 hmdcgarcal2maker.cc:205
 hmdcgarcal2maker.cc:206
 hmdcgarcal2maker.cc:207
 hmdcgarcal2maker.cc:208
 hmdcgarcal2maker.cc:209
 hmdcgarcal2maker.cc:210
 hmdcgarcal2maker.cc:211
 hmdcgarcal2maker.cc:212
 hmdcgarcal2maker.cc:213
 hmdcgarcal2maker.cc:214
 hmdcgarcal2maker.cc:215
 hmdcgarcal2maker.cc:216
 hmdcgarcal2maker.cc:217
 hmdcgarcal2maker.cc:218
 hmdcgarcal2maker.cc:219
 hmdcgarcal2maker.cc:220
 hmdcgarcal2maker.cc:221
 hmdcgarcal2maker.cc:222
 hmdcgarcal2maker.cc:223
 hmdcgarcal2maker.cc:224
 hmdcgarcal2maker.cc:225
 hmdcgarcal2maker.cc:226
 hmdcgarcal2maker.cc:227
 hmdcgarcal2maker.cc:228
 hmdcgarcal2maker.cc:229
 hmdcgarcal2maker.cc:230
 hmdcgarcal2maker.cc:231
 hmdcgarcal2maker.cc:232
 hmdcgarcal2maker.cc:233
 hmdcgarcal2maker.cc:234
 hmdcgarcal2maker.cc:235
 hmdcgarcal2maker.cc:236
 hmdcgarcal2maker.cc:237
 hmdcgarcal2maker.cc:238
 hmdcgarcal2maker.cc:239
 hmdcgarcal2maker.cc:240
 hmdcgarcal2maker.cc:241
 hmdcgarcal2maker.cc:242
 hmdcgarcal2maker.cc:243
 hmdcgarcal2maker.cc:244
 hmdcgarcal2maker.cc:245
 hmdcgarcal2maker.cc:246
 hmdcgarcal2maker.cc:247
 hmdcgarcal2maker.cc:248
 hmdcgarcal2maker.cc:249
 hmdcgarcal2maker.cc:250
 hmdcgarcal2maker.cc:251
 hmdcgarcal2maker.cc:252
 hmdcgarcal2maker.cc:253
 hmdcgarcal2maker.cc:254
 hmdcgarcal2maker.cc:255
 hmdcgarcal2maker.cc:256
 hmdcgarcal2maker.cc:257
 hmdcgarcal2maker.cc:258
 hmdcgarcal2maker.cc:259
 hmdcgarcal2maker.cc:260
 hmdcgarcal2maker.cc:261
 hmdcgarcal2maker.cc:262
 hmdcgarcal2maker.cc:263
 hmdcgarcal2maker.cc:264
 hmdcgarcal2maker.cc:265
 hmdcgarcal2maker.cc:266
 hmdcgarcal2maker.cc:267
 hmdcgarcal2maker.cc:268
 hmdcgarcal2maker.cc:269
 hmdcgarcal2maker.cc:270
 hmdcgarcal2maker.cc:271
 hmdcgarcal2maker.cc:272
 hmdcgarcal2maker.cc:273
 hmdcgarcal2maker.cc:274
 hmdcgarcal2maker.cc:275
 hmdcgarcal2maker.cc:276
 hmdcgarcal2maker.cc:277
 hmdcgarcal2maker.cc:278
 hmdcgarcal2maker.cc:279
 hmdcgarcal2maker.cc:280
 hmdcgarcal2maker.cc:281
 hmdcgarcal2maker.cc:282
 hmdcgarcal2maker.cc:283
 hmdcgarcal2maker.cc:284
 hmdcgarcal2maker.cc:285
 hmdcgarcal2maker.cc:286
 hmdcgarcal2maker.cc:287
 hmdcgarcal2maker.cc:288
 hmdcgarcal2maker.cc:289
 hmdcgarcal2maker.cc:290
 hmdcgarcal2maker.cc:291
 hmdcgarcal2maker.cc:292
 hmdcgarcal2maker.cc:293
 hmdcgarcal2maker.cc:294
 hmdcgarcal2maker.cc:295
 hmdcgarcal2maker.cc:296
 hmdcgarcal2maker.cc:297
 hmdcgarcal2maker.cc:298
 hmdcgarcal2maker.cc:299
 hmdcgarcal2maker.cc:300
 hmdcgarcal2maker.cc:301
 hmdcgarcal2maker.cc:302
 hmdcgarcal2maker.cc:303
 hmdcgarcal2maker.cc:304
 hmdcgarcal2maker.cc:305
 hmdcgarcal2maker.cc:306
 hmdcgarcal2maker.cc:307
 hmdcgarcal2maker.cc:308
 hmdcgarcal2maker.cc:309
 hmdcgarcal2maker.cc:310
 hmdcgarcal2maker.cc:311
 hmdcgarcal2maker.cc:312
 hmdcgarcal2maker.cc:313
 hmdcgarcal2maker.cc:314
 hmdcgarcal2maker.cc:315
 hmdcgarcal2maker.cc:316
 hmdcgarcal2maker.cc:317
 hmdcgarcal2maker.cc:318
 hmdcgarcal2maker.cc:319
 hmdcgarcal2maker.cc:320
 hmdcgarcal2maker.cc:321
 hmdcgarcal2maker.cc:322
 hmdcgarcal2maker.cc:323
 hmdcgarcal2maker.cc:324
 hmdcgarcal2maker.cc:325
 hmdcgarcal2maker.cc:326
 hmdcgarcal2maker.cc:327
 hmdcgarcal2maker.cc:328
 hmdcgarcal2maker.cc:329
 hmdcgarcal2maker.cc:330
 hmdcgarcal2maker.cc:331
 hmdcgarcal2maker.cc:332
 hmdcgarcal2maker.cc:333
 hmdcgarcal2maker.cc:334
 hmdcgarcal2maker.cc:335
 hmdcgarcal2maker.cc:336
 hmdcgarcal2maker.cc:337
 hmdcgarcal2maker.cc:338
 hmdcgarcal2maker.cc:339
 hmdcgarcal2maker.cc:340
 hmdcgarcal2maker.cc:341
 hmdcgarcal2maker.cc:342
 hmdcgarcal2maker.cc:343
 hmdcgarcal2maker.cc:344
 hmdcgarcal2maker.cc:345
 hmdcgarcal2maker.cc:346
 hmdcgarcal2maker.cc:347
 hmdcgarcal2maker.cc:348
 hmdcgarcal2maker.cc:349
 hmdcgarcal2maker.cc:350
 hmdcgarcal2maker.cc:351
 hmdcgarcal2maker.cc:352
 hmdcgarcal2maker.cc:353
 hmdcgarcal2maker.cc:354
 hmdcgarcal2maker.cc:355
 hmdcgarcal2maker.cc:356
 hmdcgarcal2maker.cc:357
 hmdcgarcal2maker.cc:358
 hmdcgarcal2maker.cc:359
 hmdcgarcal2maker.cc:360
 hmdcgarcal2maker.cc:361
 hmdcgarcal2maker.cc:362
 hmdcgarcal2maker.cc:363
 hmdcgarcal2maker.cc:364
 hmdcgarcal2maker.cc:365
 hmdcgarcal2maker.cc:366
 hmdcgarcal2maker.cc:367
 hmdcgarcal2maker.cc:368
 hmdcgarcal2maker.cc:369
 hmdcgarcal2maker.cc:370
 hmdcgarcal2maker.cc:371
 hmdcgarcal2maker.cc:372
 hmdcgarcal2maker.cc:373
 hmdcgarcal2maker.cc:374
 hmdcgarcal2maker.cc:375
 hmdcgarcal2maker.cc:376
 hmdcgarcal2maker.cc:377
 hmdcgarcal2maker.cc:378
 hmdcgarcal2maker.cc:379
 hmdcgarcal2maker.cc:380
 hmdcgarcal2maker.cc:381
 hmdcgarcal2maker.cc:382
 hmdcgarcal2maker.cc:383
 hmdcgarcal2maker.cc:384
 hmdcgarcal2maker.cc:385
 hmdcgarcal2maker.cc:386
 hmdcgarcal2maker.cc:387
 hmdcgarcal2maker.cc:388
 hmdcgarcal2maker.cc:389
 hmdcgarcal2maker.cc:390
 hmdcgarcal2maker.cc:391
 hmdcgarcal2maker.cc:392
 hmdcgarcal2maker.cc:393
 hmdcgarcal2maker.cc:394
 hmdcgarcal2maker.cc:395
 hmdcgarcal2maker.cc:396
 hmdcgarcal2maker.cc:397
 hmdcgarcal2maker.cc:398
 hmdcgarcal2maker.cc:399
 hmdcgarcal2maker.cc:400
 hmdcgarcal2maker.cc:401
 hmdcgarcal2maker.cc:402
 hmdcgarcal2maker.cc:403
 hmdcgarcal2maker.cc:404
 hmdcgarcal2maker.cc:405
 hmdcgarcal2maker.cc:406
 hmdcgarcal2maker.cc:407
 hmdcgarcal2maker.cc:408
 hmdcgarcal2maker.cc:409
 hmdcgarcal2maker.cc:410
 hmdcgarcal2maker.cc:411
 hmdcgarcal2maker.cc:412
 hmdcgarcal2maker.cc:413
 hmdcgarcal2maker.cc:414
 hmdcgarcal2maker.cc:415
 hmdcgarcal2maker.cc:416
 hmdcgarcal2maker.cc:417
 hmdcgarcal2maker.cc:418
 hmdcgarcal2maker.cc:419
 hmdcgarcal2maker.cc:420
 hmdcgarcal2maker.cc:421
 hmdcgarcal2maker.cc:422
 hmdcgarcal2maker.cc:423
 hmdcgarcal2maker.cc:424
 hmdcgarcal2maker.cc:425
 hmdcgarcal2maker.cc:426
 hmdcgarcal2maker.cc:427
 hmdcgarcal2maker.cc:428
 hmdcgarcal2maker.cc:429
 hmdcgarcal2maker.cc:430
 hmdcgarcal2maker.cc:431
 hmdcgarcal2maker.cc:432
 hmdcgarcal2maker.cc:433
 hmdcgarcal2maker.cc:434
 hmdcgarcal2maker.cc:435
 hmdcgarcal2maker.cc:436
 hmdcgarcal2maker.cc:437
 hmdcgarcal2maker.cc:438
 hmdcgarcal2maker.cc:439
 hmdcgarcal2maker.cc:440
 hmdcgarcal2maker.cc:441
 hmdcgarcal2maker.cc:442
 hmdcgarcal2maker.cc:443
 hmdcgarcal2maker.cc:444
 hmdcgarcal2maker.cc:445
 hmdcgarcal2maker.cc:446
 hmdcgarcal2maker.cc:447
 hmdcgarcal2maker.cc:448
 hmdcgarcal2maker.cc:449
 hmdcgarcal2maker.cc:450
 hmdcgarcal2maker.cc:451
 hmdcgarcal2maker.cc:452
 hmdcgarcal2maker.cc:453
 hmdcgarcal2maker.cc:454
 hmdcgarcal2maker.cc:455
 hmdcgarcal2maker.cc:456
 hmdcgarcal2maker.cc:457
 hmdcgarcal2maker.cc:458
 hmdcgarcal2maker.cc:459
 hmdcgarcal2maker.cc:460
 hmdcgarcal2maker.cc:461
 hmdcgarcal2maker.cc:462
 hmdcgarcal2maker.cc:463
 hmdcgarcal2maker.cc:464
 hmdcgarcal2maker.cc:465
 hmdcgarcal2maker.cc:466
 hmdcgarcal2maker.cc:467
 hmdcgarcal2maker.cc:468
 hmdcgarcal2maker.cc:469
 hmdcgarcal2maker.cc:470
 hmdcgarcal2maker.cc:471
 hmdcgarcal2maker.cc:472
 hmdcgarcal2maker.cc:473
 hmdcgarcal2maker.cc:474
 hmdcgarcal2maker.cc:475
 hmdcgarcal2maker.cc:476
 hmdcgarcal2maker.cc:477
 hmdcgarcal2maker.cc:478
 hmdcgarcal2maker.cc:479
 hmdcgarcal2maker.cc:480
 hmdcgarcal2maker.cc:481
 hmdcgarcal2maker.cc:482
 hmdcgarcal2maker.cc:483
 hmdcgarcal2maker.cc:484
 hmdcgarcal2maker.cc:485
 hmdcgarcal2maker.cc:486
 hmdcgarcal2maker.cc:487
 hmdcgarcal2maker.cc:488
 hmdcgarcal2maker.cc:489
 hmdcgarcal2maker.cc:490
 hmdcgarcal2maker.cc:491
 hmdcgarcal2maker.cc:492
 hmdcgarcal2maker.cc:493
 hmdcgarcal2maker.cc:494
 hmdcgarcal2maker.cc:495
 hmdcgarcal2maker.cc:496
 hmdcgarcal2maker.cc:497
 hmdcgarcal2maker.cc:498
 hmdcgarcal2maker.cc:499
 hmdcgarcal2maker.cc:500
 hmdcgarcal2maker.cc:501
 hmdcgarcal2maker.cc:502
 hmdcgarcal2maker.cc:503
 hmdcgarcal2maker.cc:504
 hmdcgarcal2maker.cc:505
 hmdcgarcal2maker.cc:506
 hmdcgarcal2maker.cc:507
 hmdcgarcal2maker.cc:508
 hmdcgarcal2maker.cc:509
 hmdcgarcal2maker.cc:510
 hmdcgarcal2maker.cc:511
 hmdcgarcal2maker.cc:512
 hmdcgarcal2maker.cc:513
 hmdcgarcal2maker.cc:514
 hmdcgarcal2maker.cc:515
 hmdcgarcal2maker.cc:516
 hmdcgarcal2maker.cc:517
 hmdcgarcal2maker.cc:518
 hmdcgarcal2maker.cc:519
 hmdcgarcal2maker.cc:520
 hmdcgarcal2maker.cc:521
 hmdcgarcal2maker.cc:522
 hmdcgarcal2maker.cc:523
 hmdcgarcal2maker.cc:524
 hmdcgarcal2maker.cc:525
 hmdcgarcal2maker.cc:526
 hmdcgarcal2maker.cc:527
 hmdcgarcal2maker.cc:528
 hmdcgarcal2maker.cc:529
 hmdcgarcal2maker.cc:530
 hmdcgarcal2maker.cc:531
 hmdcgarcal2maker.cc:532
 hmdcgarcal2maker.cc:533
 hmdcgarcal2maker.cc:534
 hmdcgarcal2maker.cc:535
 hmdcgarcal2maker.cc:536
 hmdcgarcal2maker.cc:537
 hmdcgarcal2maker.cc:538
 hmdcgarcal2maker.cc:539
 hmdcgarcal2maker.cc:540
 hmdcgarcal2maker.cc:541
 hmdcgarcal2maker.cc:542
 hmdcgarcal2maker.cc:543
 hmdcgarcal2maker.cc:544
 hmdcgarcal2maker.cc:545
 hmdcgarcal2maker.cc:546
 hmdcgarcal2maker.cc:547
 hmdcgarcal2maker.cc:548
 hmdcgarcal2maker.cc:549
 hmdcgarcal2maker.cc:550
 hmdcgarcal2maker.cc:551
 hmdcgarcal2maker.cc:552
 hmdcgarcal2maker.cc:553
 hmdcgarcal2maker.cc:554
 hmdcgarcal2maker.cc:555
 hmdcgarcal2maker.cc:556
 hmdcgarcal2maker.cc:557
 hmdcgarcal2maker.cc:558
 hmdcgarcal2maker.cc:559
 hmdcgarcal2maker.cc:560
 hmdcgarcal2maker.cc:561
 hmdcgarcal2maker.cc:562
 hmdcgarcal2maker.cc:563
 hmdcgarcal2maker.cc:564
 hmdcgarcal2maker.cc:565
 hmdcgarcal2maker.cc:566
 hmdcgarcal2maker.cc:567
 hmdcgarcal2maker.cc:568
 hmdcgarcal2maker.cc:569
 hmdcgarcal2maker.cc:570
 hmdcgarcal2maker.cc:571
 hmdcgarcal2maker.cc:572
 hmdcgarcal2maker.cc:573
 hmdcgarcal2maker.cc:574
 hmdcgarcal2maker.cc:575
 hmdcgarcal2maker.cc:576
 hmdcgarcal2maker.cc:577
 hmdcgarcal2maker.cc:578
 hmdcgarcal2maker.cc:579
 hmdcgarcal2maker.cc:580
 hmdcgarcal2maker.cc:581
 hmdcgarcal2maker.cc:582
 hmdcgarcal2maker.cc:583
 hmdcgarcal2maker.cc:584
 hmdcgarcal2maker.cc:585
 hmdcgarcal2maker.cc:586
 hmdcgarcal2maker.cc:587
 hmdcgarcal2maker.cc:588
 hmdcgarcal2maker.cc:589
 hmdcgarcal2maker.cc:590
 hmdcgarcal2maker.cc:591
 hmdcgarcal2maker.cc:592
 hmdcgarcal2maker.cc:593
 hmdcgarcal2maker.cc:594
 hmdcgarcal2maker.cc:595
 hmdcgarcal2maker.cc:596
 hmdcgarcal2maker.cc:597
 hmdcgarcal2maker.cc:598
 hmdcgarcal2maker.cc:599
 hmdcgarcal2maker.cc:600
 hmdcgarcal2maker.cc:601
 hmdcgarcal2maker.cc:602
 hmdcgarcal2maker.cc:603
 hmdcgarcal2maker.cc:604
 hmdcgarcal2maker.cc:605
 hmdcgarcal2maker.cc:606
 hmdcgarcal2maker.cc:607
 hmdcgarcal2maker.cc:608
 hmdcgarcal2maker.cc:609
 hmdcgarcal2maker.cc:610
 hmdcgarcal2maker.cc:611
 hmdcgarcal2maker.cc:612
 hmdcgarcal2maker.cc:613
 hmdcgarcal2maker.cc:614
 hmdcgarcal2maker.cc:615
 hmdcgarcal2maker.cc:616
 hmdcgarcal2maker.cc:617
 hmdcgarcal2maker.cc:618
 hmdcgarcal2maker.cc:619
 hmdcgarcal2maker.cc:620
 hmdcgarcal2maker.cc:621
 hmdcgarcal2maker.cc:622
 hmdcgarcal2maker.cc:623
 hmdcgarcal2maker.cc:624
 hmdcgarcal2maker.cc:625
 hmdcgarcal2maker.cc:626
 hmdcgarcal2maker.cc:627
 hmdcgarcal2maker.cc:628
 hmdcgarcal2maker.cc:629
 hmdcgarcal2maker.cc:630
 hmdcgarcal2maker.cc:631
 hmdcgarcal2maker.cc:632
 hmdcgarcal2maker.cc:633
 hmdcgarcal2maker.cc:634
 hmdcgarcal2maker.cc:635
 hmdcgarcal2maker.cc:636
 hmdcgarcal2maker.cc:637
 hmdcgarcal2maker.cc:638
 hmdcgarcal2maker.cc:639
 hmdcgarcal2maker.cc:640
 hmdcgarcal2maker.cc:641
 hmdcgarcal2maker.cc:642
 hmdcgarcal2maker.cc:643
 hmdcgarcal2maker.cc:644
 hmdcgarcal2maker.cc:645
 hmdcgarcal2maker.cc:646
 hmdcgarcal2maker.cc:647
 hmdcgarcal2maker.cc:648
 hmdcgarcal2maker.cc:649
 hmdcgarcal2maker.cc:650
 hmdcgarcal2maker.cc:651
 hmdcgarcal2maker.cc:652
 hmdcgarcal2maker.cc:653
 hmdcgarcal2maker.cc:654
 hmdcgarcal2maker.cc:655
 hmdcgarcal2maker.cc:656
 hmdcgarcal2maker.cc:657
 hmdcgarcal2maker.cc:658
 hmdcgarcal2maker.cc:659
 hmdcgarcal2maker.cc:660
 hmdcgarcal2maker.cc:661
 hmdcgarcal2maker.cc:662
 hmdcgarcal2maker.cc:663
 hmdcgarcal2maker.cc:664
 hmdcgarcal2maker.cc:665
 hmdcgarcal2maker.cc:666
 hmdcgarcal2maker.cc:667
 hmdcgarcal2maker.cc:668
 hmdcgarcal2maker.cc:669
 hmdcgarcal2maker.cc:670
 hmdcgarcal2maker.cc:671
 hmdcgarcal2maker.cc:672
 hmdcgarcal2maker.cc:673
 hmdcgarcal2maker.cc:674
 hmdcgarcal2maker.cc:675
 hmdcgarcal2maker.cc:676
 hmdcgarcal2maker.cc:677
 hmdcgarcal2maker.cc:678
 hmdcgarcal2maker.cc:679
 hmdcgarcal2maker.cc:680
 hmdcgarcal2maker.cc:681
 hmdcgarcal2maker.cc:682
 hmdcgarcal2maker.cc:683
 hmdcgarcal2maker.cc:684
 hmdcgarcal2maker.cc:685
 hmdcgarcal2maker.cc:686
 hmdcgarcal2maker.cc:687
 hmdcgarcal2maker.cc:688
 hmdcgarcal2maker.cc:689
 hmdcgarcal2maker.cc:690
 hmdcgarcal2maker.cc:691
 hmdcgarcal2maker.cc:692
 hmdcgarcal2maker.cc:693
 hmdcgarcal2maker.cc:694
 hmdcgarcal2maker.cc:695
 hmdcgarcal2maker.cc:696
 hmdcgarcal2maker.cc:697
 hmdcgarcal2maker.cc:698
 hmdcgarcal2maker.cc:699
 hmdcgarcal2maker.cc:700
 hmdcgarcal2maker.cc:701
 hmdcgarcal2maker.cc:702
 hmdcgarcal2maker.cc:703
 hmdcgarcal2maker.cc:704
 hmdcgarcal2maker.cc:705
 hmdcgarcal2maker.cc:706
 hmdcgarcal2maker.cc:707
 hmdcgarcal2maker.cc:708
 hmdcgarcal2maker.cc:709
 hmdcgarcal2maker.cc:710
 hmdcgarcal2maker.cc:711
 hmdcgarcal2maker.cc:712
 hmdcgarcal2maker.cc:713
 hmdcgarcal2maker.cc:714
 hmdcgarcal2maker.cc:715
 hmdcgarcal2maker.cc:716
 hmdcgarcal2maker.cc:717
 hmdcgarcal2maker.cc:718
 hmdcgarcal2maker.cc:719
 hmdcgarcal2maker.cc:720
 hmdcgarcal2maker.cc:721
 hmdcgarcal2maker.cc:722
 hmdcgarcal2maker.cc:723
 hmdcgarcal2maker.cc:724
 hmdcgarcal2maker.cc:725
 hmdcgarcal2maker.cc:726
 hmdcgarcal2maker.cc:727
 hmdcgarcal2maker.cc:728
 hmdcgarcal2maker.cc:729
 hmdcgarcal2maker.cc:730
 hmdcgarcal2maker.cc:731
 hmdcgarcal2maker.cc:732
 hmdcgarcal2maker.cc:733
 hmdcgarcal2maker.cc:734
 hmdcgarcal2maker.cc:735
 hmdcgarcal2maker.cc:736
 hmdcgarcal2maker.cc:737
 hmdcgarcal2maker.cc:738
 hmdcgarcal2maker.cc:739
 hmdcgarcal2maker.cc:740
 hmdcgarcal2maker.cc:741
 hmdcgarcal2maker.cc:742
 hmdcgarcal2maker.cc:743
 hmdcgarcal2maker.cc:744
 hmdcgarcal2maker.cc:745
 hmdcgarcal2maker.cc:746
 hmdcgarcal2maker.cc:747
 hmdcgarcal2maker.cc:748
 hmdcgarcal2maker.cc:749
 hmdcgarcal2maker.cc:750
 hmdcgarcal2maker.cc:751
 hmdcgarcal2maker.cc:752
 hmdcgarcal2maker.cc:753
 hmdcgarcal2maker.cc:754
 hmdcgarcal2maker.cc:755
 hmdcgarcal2maker.cc:756
 hmdcgarcal2maker.cc:757
 hmdcgarcal2maker.cc:758
 hmdcgarcal2maker.cc:759
 hmdcgarcal2maker.cc:760
 hmdcgarcal2maker.cc:761
 hmdcgarcal2maker.cc:762
 hmdcgarcal2maker.cc:763
 hmdcgarcal2maker.cc:764
 hmdcgarcal2maker.cc:765
 hmdcgarcal2maker.cc:766
 hmdcgarcal2maker.cc:767
 hmdcgarcal2maker.cc:768
 hmdcgarcal2maker.cc:769
 hmdcgarcal2maker.cc:770
 hmdcgarcal2maker.cc:771
 hmdcgarcal2maker.cc:772
 hmdcgarcal2maker.cc:773
 hmdcgarcal2maker.cc:774
 hmdcgarcal2maker.cc:775
 hmdcgarcal2maker.cc:776
 hmdcgarcal2maker.cc:777
 hmdcgarcal2maker.cc:778
 hmdcgarcal2maker.cc:779
 hmdcgarcal2maker.cc:780
 hmdcgarcal2maker.cc:781
 hmdcgarcal2maker.cc:782
 hmdcgarcal2maker.cc:783
 hmdcgarcal2maker.cc:784
 hmdcgarcal2maker.cc:785
 hmdcgarcal2maker.cc:786
 hmdcgarcal2maker.cc:787
 hmdcgarcal2maker.cc:788
 hmdcgarcal2maker.cc:789
 hmdcgarcal2maker.cc:790
 hmdcgarcal2maker.cc:791
 hmdcgarcal2maker.cc:792
 hmdcgarcal2maker.cc:793
 hmdcgarcal2maker.cc:794
 hmdcgarcal2maker.cc:795
 hmdcgarcal2maker.cc:796
 hmdcgarcal2maker.cc:797
 hmdcgarcal2maker.cc:798
 hmdcgarcal2maker.cc:799
 hmdcgarcal2maker.cc:800
 hmdcgarcal2maker.cc:801
 hmdcgarcal2maker.cc:802
 hmdcgarcal2maker.cc:803
 hmdcgarcal2maker.cc:804
 hmdcgarcal2maker.cc:805
 hmdcgarcal2maker.cc:806
 hmdcgarcal2maker.cc:807
 hmdcgarcal2maker.cc:808
 hmdcgarcal2maker.cc:809
 hmdcgarcal2maker.cc:810
 hmdcgarcal2maker.cc:811
 hmdcgarcal2maker.cc:812
 hmdcgarcal2maker.cc:813
 hmdcgarcal2maker.cc:814
 hmdcgarcal2maker.cc:815
 hmdcgarcal2maker.cc:816
 hmdcgarcal2maker.cc:817
 hmdcgarcal2maker.cc:818
 hmdcgarcal2maker.cc:819
 hmdcgarcal2maker.cc:820
 hmdcgarcal2maker.cc:821
 hmdcgarcal2maker.cc:822
 hmdcgarcal2maker.cc:823
 hmdcgarcal2maker.cc:824
 hmdcgarcal2maker.cc:825
 hmdcgarcal2maker.cc:826
 hmdcgarcal2maker.cc:827
 hmdcgarcal2maker.cc:828
 hmdcgarcal2maker.cc:829
 hmdcgarcal2maker.cc:830
 hmdcgarcal2maker.cc:831
 hmdcgarcal2maker.cc:832
 hmdcgarcal2maker.cc:833
 hmdcgarcal2maker.cc:834
 hmdcgarcal2maker.cc:835
 hmdcgarcal2maker.cc:836
 hmdcgarcal2maker.cc:837
 hmdcgarcal2maker.cc:838
 hmdcgarcal2maker.cc:839
 hmdcgarcal2maker.cc:840
 hmdcgarcal2maker.cc:841
 hmdcgarcal2maker.cc:842
 hmdcgarcal2maker.cc:843
 hmdcgarcal2maker.cc:844
 hmdcgarcal2maker.cc:845
 hmdcgarcal2maker.cc:846
 hmdcgarcal2maker.cc:847
 hmdcgarcal2maker.cc:848
 hmdcgarcal2maker.cc:849
 hmdcgarcal2maker.cc:850
 hmdcgarcal2maker.cc:851
 hmdcgarcal2maker.cc:852
 hmdcgarcal2maker.cc:853
 hmdcgarcal2maker.cc:854
 hmdcgarcal2maker.cc:855
 hmdcgarcal2maker.cc:856
 hmdcgarcal2maker.cc:857
 hmdcgarcal2maker.cc:858
 hmdcgarcal2maker.cc:859
 hmdcgarcal2maker.cc:860
 hmdcgarcal2maker.cc:861
 hmdcgarcal2maker.cc:862
 hmdcgarcal2maker.cc:863
 hmdcgarcal2maker.cc:864
 hmdcgarcal2maker.cc:865
 hmdcgarcal2maker.cc:866
 hmdcgarcal2maker.cc:867
 hmdcgarcal2maker.cc:868
 hmdcgarcal2maker.cc:869
 hmdcgarcal2maker.cc:870
 hmdcgarcal2maker.cc:871
 hmdcgarcal2maker.cc:872
 hmdcgarcal2maker.cc:873
 hmdcgarcal2maker.cc:874
 hmdcgarcal2maker.cc:875
 hmdcgarcal2maker.cc:876
 hmdcgarcal2maker.cc:877
 hmdcgarcal2maker.cc:878
 hmdcgarcal2maker.cc:879
 hmdcgarcal2maker.cc:880
 hmdcgarcal2maker.cc:881
 hmdcgarcal2maker.cc:882
 hmdcgarcal2maker.cc:883
 hmdcgarcal2maker.cc:884
 hmdcgarcal2maker.cc:885
 hmdcgarcal2maker.cc:886
 hmdcgarcal2maker.cc:887
 hmdcgarcal2maker.cc:888
 hmdcgarcal2maker.cc:889
 hmdcgarcal2maker.cc:890
 hmdcgarcal2maker.cc:891
 hmdcgarcal2maker.cc:892
 hmdcgarcal2maker.cc:893
 hmdcgarcal2maker.cc:894
 hmdcgarcal2maker.cc:895
 hmdcgarcal2maker.cc:896
 hmdcgarcal2maker.cc:897
 hmdcgarcal2maker.cc:898
 hmdcgarcal2maker.cc:899
 hmdcgarcal2maker.cc:900
 hmdcgarcal2maker.cc:901
 hmdcgarcal2maker.cc:902
 hmdcgarcal2maker.cc:903
 hmdcgarcal2maker.cc:904
 hmdcgarcal2maker.cc:905
 hmdcgarcal2maker.cc:906
 hmdcgarcal2maker.cc:907
 hmdcgarcal2maker.cc:908
 hmdcgarcal2maker.cc:909
 hmdcgarcal2maker.cc:910
 hmdcgarcal2maker.cc:911
 hmdcgarcal2maker.cc:912
 hmdcgarcal2maker.cc:913
 hmdcgarcal2maker.cc:914
 hmdcgarcal2maker.cc:915
 hmdcgarcal2maker.cc:916
 hmdcgarcal2maker.cc:917
 hmdcgarcal2maker.cc:918
 hmdcgarcal2maker.cc:919
 hmdcgarcal2maker.cc:920
 hmdcgarcal2maker.cc:921
 hmdcgarcal2maker.cc:922
 hmdcgarcal2maker.cc:923
 hmdcgarcal2maker.cc:924
 hmdcgarcal2maker.cc:925
 hmdcgarcal2maker.cc:926
 hmdcgarcal2maker.cc:927
 hmdcgarcal2maker.cc:928
 hmdcgarcal2maker.cc:929
 hmdcgarcal2maker.cc:930
 hmdcgarcal2maker.cc:931
 hmdcgarcal2maker.cc:932
 hmdcgarcal2maker.cc:933
 hmdcgarcal2maker.cc:934
 hmdcgarcal2maker.cc:935
 hmdcgarcal2maker.cc:936
 hmdcgarcal2maker.cc:937
 hmdcgarcal2maker.cc:938
 hmdcgarcal2maker.cc:939
 hmdcgarcal2maker.cc:940
 hmdcgarcal2maker.cc:941
 hmdcgarcal2maker.cc:942
 hmdcgarcal2maker.cc:943
 hmdcgarcal2maker.cc:944
 hmdcgarcal2maker.cc:945
 hmdcgarcal2maker.cc:946
 hmdcgarcal2maker.cc:947
 hmdcgarcal2maker.cc:948
 hmdcgarcal2maker.cc:949
 hmdcgarcal2maker.cc:950
 hmdcgarcal2maker.cc:951
 hmdcgarcal2maker.cc:952
 hmdcgarcal2maker.cc:953
 hmdcgarcal2maker.cc:954
 hmdcgarcal2maker.cc:955
 hmdcgarcal2maker.cc:956
 hmdcgarcal2maker.cc:957
 hmdcgarcal2maker.cc:958
 hmdcgarcal2maker.cc:959
 hmdcgarcal2maker.cc:960
 hmdcgarcal2maker.cc:961
 hmdcgarcal2maker.cc:962
 hmdcgarcal2maker.cc:963
 hmdcgarcal2maker.cc:964
 hmdcgarcal2maker.cc:965
 hmdcgarcal2maker.cc:966
 hmdcgarcal2maker.cc:967
 hmdcgarcal2maker.cc:968
 hmdcgarcal2maker.cc:969
 hmdcgarcal2maker.cc:970
 hmdcgarcal2maker.cc:971
 hmdcgarcal2maker.cc:972
 hmdcgarcal2maker.cc:973
 hmdcgarcal2maker.cc:974
 hmdcgarcal2maker.cc:975
 hmdcgarcal2maker.cc:976
 hmdcgarcal2maker.cc:977
 hmdcgarcal2maker.cc:978
 hmdcgarcal2maker.cc:979
 hmdcgarcal2maker.cc:980
 hmdcgarcal2maker.cc:981
 hmdcgarcal2maker.cc:982
 hmdcgarcal2maker.cc:983
 hmdcgarcal2maker.cc:984
 hmdcgarcal2maker.cc:985
 hmdcgarcal2maker.cc:986
 hmdcgarcal2maker.cc:987
 hmdcgarcal2maker.cc:988
 hmdcgarcal2maker.cc:989
 hmdcgarcal2maker.cc:990
 hmdcgarcal2maker.cc:991
 hmdcgarcal2maker.cc:992
 hmdcgarcal2maker.cc:993
 hmdcgarcal2maker.cc:994
 hmdcgarcal2maker.cc:995
 hmdcgarcal2maker.cc:996
 hmdcgarcal2maker.cc:997
 hmdcgarcal2maker.cc:998
 hmdcgarcal2maker.cc:999
 hmdcgarcal2maker.cc:1000
 hmdcgarcal2maker.cc:1001
 hmdcgarcal2maker.cc:1002
 hmdcgarcal2maker.cc:1003
 hmdcgarcal2maker.cc:1004
 hmdcgarcal2maker.cc:1005
 hmdcgarcal2maker.cc:1006
 hmdcgarcal2maker.cc:1007
 hmdcgarcal2maker.cc:1008
 hmdcgarcal2maker.cc:1009
 hmdcgarcal2maker.cc:1010
 hmdcgarcal2maker.cc:1011
 hmdcgarcal2maker.cc:1012
 hmdcgarcal2maker.cc:1013
 hmdcgarcal2maker.cc:1014
 hmdcgarcal2maker.cc:1015
 hmdcgarcal2maker.cc:1016
 hmdcgarcal2maker.cc:1017
 hmdcgarcal2maker.cc:1018
 hmdcgarcal2maker.cc:1019
 hmdcgarcal2maker.cc:1020
 hmdcgarcal2maker.cc:1021
 hmdcgarcal2maker.cc:1022
 hmdcgarcal2maker.cc:1023
 hmdcgarcal2maker.cc:1024
 hmdcgarcal2maker.cc:1025
 hmdcgarcal2maker.cc:1026
 hmdcgarcal2maker.cc:1027
 hmdcgarcal2maker.cc:1028
 hmdcgarcal2maker.cc:1029
 hmdcgarcal2maker.cc:1030
 hmdcgarcal2maker.cc:1031
 hmdcgarcal2maker.cc:1032
 hmdcgarcal2maker.cc:1033
 hmdcgarcal2maker.cc:1034
 hmdcgarcal2maker.cc:1035
 hmdcgarcal2maker.cc:1036
 hmdcgarcal2maker.cc:1037
 hmdcgarcal2maker.cc:1038
 hmdcgarcal2maker.cc:1039
 hmdcgarcal2maker.cc:1040
 hmdcgarcal2maker.cc:1041
 hmdcgarcal2maker.cc:1042
 hmdcgarcal2maker.cc:1043
 hmdcgarcal2maker.cc:1044
 hmdcgarcal2maker.cc:1045
 hmdcgarcal2maker.cc:1046
 hmdcgarcal2maker.cc:1047
 hmdcgarcal2maker.cc:1048
 hmdcgarcal2maker.cc:1049
 hmdcgarcal2maker.cc:1050
 hmdcgarcal2maker.cc:1051
 hmdcgarcal2maker.cc:1052
 hmdcgarcal2maker.cc:1053
 hmdcgarcal2maker.cc:1054
 hmdcgarcal2maker.cc:1055
 hmdcgarcal2maker.cc:1056
 hmdcgarcal2maker.cc:1057
 hmdcgarcal2maker.cc:1058
 hmdcgarcal2maker.cc:1059
 hmdcgarcal2maker.cc:1060
 hmdcgarcal2maker.cc:1061
 hmdcgarcal2maker.cc:1062
 hmdcgarcal2maker.cc:1063
 hmdcgarcal2maker.cc:1064
 hmdcgarcal2maker.cc:1065
 hmdcgarcal2maker.cc:1066
 hmdcgarcal2maker.cc:1067
 hmdcgarcal2maker.cc:1068
 hmdcgarcal2maker.cc:1069
 hmdcgarcal2maker.cc:1070
 hmdcgarcal2maker.cc:1071
 hmdcgarcal2maker.cc:1072
 hmdcgarcal2maker.cc:1073
 hmdcgarcal2maker.cc:1074
 hmdcgarcal2maker.cc:1075
 hmdcgarcal2maker.cc:1076
 hmdcgarcal2maker.cc:1077
 hmdcgarcal2maker.cc:1078
 hmdcgarcal2maker.cc:1079
 hmdcgarcal2maker.cc:1080
 hmdcgarcal2maker.cc:1081
 hmdcgarcal2maker.cc:1082
 hmdcgarcal2maker.cc:1083
 hmdcgarcal2maker.cc:1084
 hmdcgarcal2maker.cc:1085
 hmdcgarcal2maker.cc:1086
 hmdcgarcal2maker.cc:1087
 hmdcgarcal2maker.cc:1088
 hmdcgarcal2maker.cc:1089
 hmdcgarcal2maker.cc:1090
 hmdcgarcal2maker.cc:1091
 hmdcgarcal2maker.cc:1092
 hmdcgarcal2maker.cc:1093
 hmdcgarcal2maker.cc:1094
 hmdcgarcal2maker.cc:1095
 hmdcgarcal2maker.cc:1096
 hmdcgarcal2maker.cc:1097
 hmdcgarcal2maker.cc:1098
 hmdcgarcal2maker.cc:1099
 hmdcgarcal2maker.cc:1100
 hmdcgarcal2maker.cc:1101
 hmdcgarcal2maker.cc:1102
 hmdcgarcal2maker.cc:1103
 hmdcgarcal2maker.cc:1104
 hmdcgarcal2maker.cc:1105
 hmdcgarcal2maker.cc:1106
 hmdcgarcal2maker.cc:1107
 hmdcgarcal2maker.cc:1108
 hmdcgarcal2maker.cc:1109
 hmdcgarcal2maker.cc:1110
 hmdcgarcal2maker.cc:1111
 hmdcgarcal2maker.cc:1112
 hmdcgarcal2maker.cc:1113
 hmdcgarcal2maker.cc:1114
 hmdcgarcal2maker.cc:1115
 hmdcgarcal2maker.cc:1116
 hmdcgarcal2maker.cc:1117
 hmdcgarcal2maker.cc:1118
 hmdcgarcal2maker.cc:1119
 hmdcgarcal2maker.cc:1120
 hmdcgarcal2maker.cc:1121
 hmdcgarcal2maker.cc:1122
 hmdcgarcal2maker.cc:1123
 hmdcgarcal2maker.cc:1124
 hmdcgarcal2maker.cc:1125
 hmdcgarcal2maker.cc:1126
 hmdcgarcal2maker.cc:1127
 hmdcgarcal2maker.cc:1128
 hmdcgarcal2maker.cc:1129
 hmdcgarcal2maker.cc:1130
 hmdcgarcal2maker.cc:1131
 hmdcgarcal2maker.cc:1132
 hmdcgarcal2maker.cc:1133
 hmdcgarcal2maker.cc:1134
 hmdcgarcal2maker.cc:1135
 hmdcgarcal2maker.cc:1136
 hmdcgarcal2maker.cc:1137
 hmdcgarcal2maker.cc:1138
 hmdcgarcal2maker.cc:1139
 hmdcgarcal2maker.cc:1140
 hmdcgarcal2maker.cc:1141
 hmdcgarcal2maker.cc:1142
 hmdcgarcal2maker.cc:1143
 hmdcgarcal2maker.cc:1144
 hmdcgarcal2maker.cc:1145
 hmdcgarcal2maker.cc:1146
 hmdcgarcal2maker.cc:1147
 hmdcgarcal2maker.cc:1148
 hmdcgarcal2maker.cc:1149
 hmdcgarcal2maker.cc:1150
 hmdcgarcal2maker.cc:1151
 hmdcgarcal2maker.cc:1152
 hmdcgarcal2maker.cc:1153
 hmdcgarcal2maker.cc:1154
 hmdcgarcal2maker.cc:1155
 hmdcgarcal2maker.cc:1156
 hmdcgarcal2maker.cc:1157
 hmdcgarcal2maker.cc:1158
 hmdcgarcal2maker.cc:1159
 hmdcgarcal2maker.cc:1160
 hmdcgarcal2maker.cc:1161
 hmdcgarcal2maker.cc:1162
 hmdcgarcal2maker.cc:1163
 hmdcgarcal2maker.cc:1164
 hmdcgarcal2maker.cc:1165
 hmdcgarcal2maker.cc:1166
 hmdcgarcal2maker.cc:1167
 hmdcgarcal2maker.cc:1168
 hmdcgarcal2maker.cc:1169
 hmdcgarcal2maker.cc:1170
 hmdcgarcal2maker.cc:1171
 hmdcgarcal2maker.cc:1172
 hmdcgarcal2maker.cc:1173
 hmdcgarcal2maker.cc:1174
 hmdcgarcal2maker.cc:1175
 hmdcgarcal2maker.cc:1176
 hmdcgarcal2maker.cc:1177
 hmdcgarcal2maker.cc:1178
 hmdcgarcal2maker.cc:1179
 hmdcgarcal2maker.cc:1180
 hmdcgarcal2maker.cc:1181
 hmdcgarcal2maker.cc:1182
 hmdcgarcal2maker.cc:1183
 hmdcgarcal2maker.cc:1184
 hmdcgarcal2maker.cc:1185
 hmdcgarcal2maker.cc:1186
 hmdcgarcal2maker.cc:1187
 hmdcgarcal2maker.cc:1188
 hmdcgarcal2maker.cc:1189
 hmdcgarcal2maker.cc:1190
 hmdcgarcal2maker.cc:1191
 hmdcgarcal2maker.cc:1192
 hmdcgarcal2maker.cc:1193
 hmdcgarcal2maker.cc:1194
 hmdcgarcal2maker.cc:1195
 hmdcgarcal2maker.cc:1196
 hmdcgarcal2maker.cc:1197
 hmdcgarcal2maker.cc:1198
 hmdcgarcal2maker.cc:1199
 hmdcgarcal2maker.cc:1200
 hmdcgarcal2maker.cc:1201
 hmdcgarcal2maker.cc:1202
 hmdcgarcal2maker.cc:1203
 hmdcgarcal2maker.cc:1204
 hmdcgarcal2maker.cc:1205
 hmdcgarcal2maker.cc:1206
 hmdcgarcal2maker.cc:1207
 hmdcgarcal2maker.cc:1208
 hmdcgarcal2maker.cc:1209
 hmdcgarcal2maker.cc:1210
 hmdcgarcal2maker.cc:1211
 hmdcgarcal2maker.cc:1212
 hmdcgarcal2maker.cc:1213
 hmdcgarcal2maker.cc:1214
 hmdcgarcal2maker.cc:1215
 hmdcgarcal2maker.cc:1216
 hmdcgarcal2maker.cc:1217
 hmdcgarcal2maker.cc:1218
 hmdcgarcal2maker.cc:1219
 hmdcgarcal2maker.cc:1220
 hmdcgarcal2maker.cc:1221
 hmdcgarcal2maker.cc:1222
 hmdcgarcal2maker.cc:1223
 hmdcgarcal2maker.cc:1224
 hmdcgarcal2maker.cc:1225
 hmdcgarcal2maker.cc:1226
 hmdcgarcal2maker.cc:1227
 hmdcgarcal2maker.cc:1228
 hmdcgarcal2maker.cc:1229
 hmdcgarcal2maker.cc:1230
 hmdcgarcal2maker.cc:1231
 hmdcgarcal2maker.cc:1232
 hmdcgarcal2maker.cc:1233
 hmdcgarcal2maker.cc:1234
 hmdcgarcal2maker.cc:1235
 hmdcgarcal2maker.cc:1236
 hmdcgarcal2maker.cc:1237
 hmdcgarcal2maker.cc:1238
 hmdcgarcal2maker.cc:1239
 hmdcgarcal2maker.cc:1240
 hmdcgarcal2maker.cc:1241
 hmdcgarcal2maker.cc:1242
 hmdcgarcal2maker.cc:1243
 hmdcgarcal2maker.cc:1244
 hmdcgarcal2maker.cc:1245
 hmdcgarcal2maker.cc:1246
 hmdcgarcal2maker.cc:1247
 hmdcgarcal2maker.cc:1248
 hmdcgarcal2maker.cc:1249
 hmdcgarcal2maker.cc:1250
 hmdcgarcal2maker.cc:1251
 hmdcgarcal2maker.cc:1252
 hmdcgarcal2maker.cc:1253
 hmdcgarcal2maker.cc:1254
 hmdcgarcal2maker.cc:1255
 hmdcgarcal2maker.cc:1256
 hmdcgarcal2maker.cc:1257
 hmdcgarcal2maker.cc:1258
 hmdcgarcal2maker.cc:1259
 hmdcgarcal2maker.cc:1260
 hmdcgarcal2maker.cc:1261
 hmdcgarcal2maker.cc:1262
 hmdcgarcal2maker.cc:1263
 hmdcgarcal2maker.cc:1264
 hmdcgarcal2maker.cc:1265
 hmdcgarcal2maker.cc:1266
 hmdcgarcal2maker.cc:1267
 hmdcgarcal2maker.cc:1268
 hmdcgarcal2maker.cc:1269
 hmdcgarcal2maker.cc:1270
 hmdcgarcal2maker.cc:1271
 hmdcgarcal2maker.cc:1272
 hmdcgarcal2maker.cc:1273
 hmdcgarcal2maker.cc:1274
 hmdcgarcal2maker.cc:1275
 hmdcgarcal2maker.cc:1276
 hmdcgarcal2maker.cc:1277
 hmdcgarcal2maker.cc:1278
 hmdcgarcal2maker.cc:1279
 hmdcgarcal2maker.cc:1280
 hmdcgarcal2maker.cc:1281
 hmdcgarcal2maker.cc:1282
 hmdcgarcal2maker.cc:1283
 hmdcgarcal2maker.cc:1284
 hmdcgarcal2maker.cc:1285
 hmdcgarcal2maker.cc:1286
 hmdcgarcal2maker.cc:1287
 hmdcgarcal2maker.cc:1288
 hmdcgarcal2maker.cc:1289
 hmdcgarcal2maker.cc:1290
 hmdcgarcal2maker.cc:1291
 hmdcgarcal2maker.cc:1292
 hmdcgarcal2maker.cc:1293
 hmdcgarcal2maker.cc:1294
 hmdcgarcal2maker.cc:1295
 hmdcgarcal2maker.cc:1296
 hmdcgarcal2maker.cc:1297
 hmdcgarcal2maker.cc:1298
 hmdcgarcal2maker.cc:1299
 hmdcgarcal2maker.cc:1300
 hmdcgarcal2maker.cc:1301
 hmdcgarcal2maker.cc:1302
 hmdcgarcal2maker.cc:1303
 hmdcgarcal2maker.cc:1304
 hmdcgarcal2maker.cc:1305
 hmdcgarcal2maker.cc:1306
 hmdcgarcal2maker.cc:1307
 hmdcgarcal2maker.cc:1308
 hmdcgarcal2maker.cc:1309
 hmdcgarcal2maker.cc:1310
 hmdcgarcal2maker.cc:1311
 hmdcgarcal2maker.cc:1312
 hmdcgarcal2maker.cc:1313
 hmdcgarcal2maker.cc:1314
 hmdcgarcal2maker.cc:1315
 hmdcgarcal2maker.cc:1316
 hmdcgarcal2maker.cc:1317
 hmdcgarcal2maker.cc:1318
 hmdcgarcal2maker.cc:1319
 hmdcgarcal2maker.cc:1320
 hmdcgarcal2maker.cc:1321
 hmdcgarcal2maker.cc:1322
 hmdcgarcal2maker.cc:1323
 hmdcgarcal2maker.cc:1324
 hmdcgarcal2maker.cc:1325
 hmdcgarcal2maker.cc:1326
 hmdcgarcal2maker.cc:1327
 hmdcgarcal2maker.cc:1328
 hmdcgarcal2maker.cc:1329
 hmdcgarcal2maker.cc:1330
 hmdcgarcal2maker.cc:1331