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

//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////////////////
// HMdcGarEffMaker
// Class to produce parameters for HMdcCellEff
// The input file is produced by HMdcGarSignalReader and contains the
// the needed Hists to perform the calculations. The final parameter file
// is written to the ascii output and a root output containing the created
// and fitted hists is written too.
////////////////////////////////////////////////////////////////////////////
using namespace std;
#include <stdlib.h>
#include <iostream> 
#include <iomanip>
#include "hmdcgareffmaker.h"
#include "htool.h"
#include "TString.h"
#include "TFile.h"
#include "TDirectory.h"
#include "TH1.h"
#include "TROOT.h"
#include "TKey.h"
#include "TStyle.h"
#include "TMath.h"
#include "TList.h"
#include "TObjString.h"
#include "TF1.h"

Int_t HMdcGarEffMaker::colors[10]={1,2,4,6,8,30,38,28,46,44};

ClassImp(HMdcGarEffMaker)

HMdcGarEffMaker::HMdcGarEffMaker(const Char_t* name,const Char_t* title)
    : TNamed(name,title)
{
    // constructor for HMdcGarEffMaker
    initVariables();
}
HMdcGarEffMaker::~HMdcGarEffMaker()
{
  // destructor of HMdcGarEffMaker
}
void HMdcGarEffMaker::setFileNameAsciiOut(TString myfile)
{
    // Sets root output of HMdcGarEffMaker
    fNameAsciiOut=myfile;
    if(fNameAsciiOut.CompareTo("")==0)
    {
	Error("HMdcGarEffMaker:setFileNameAsciiOut()","NO ASCII OUTPUT FILE SEPCIFIED!");
        exit(1);
    };
    cout<<"HMdcGarEffMaker::setFileNameAsciiOut(): OUTPUT FILE= "<<fNameAsciiOut.Data()<<endl;
}
void HMdcGarEffMaker::setFileNameRootOut(TString myfile)
{
    // Sets root output of HMdcGarEffMaker
    fNameRootOut=myfile;
    if(fNameRootOut.CompareTo("")==0)
    {
	Error("HMdcGarEffMaker:setFileNameRootOut()","NO ROOT OUTPUT FILE SEPCIFIED!");
        exit(1);
    };
    cout<<"HMdcGarEffMaker::setFileNameRootOut() : OUTPUT FILE= "<<fNameRootOut.Data()<<endl;
}
void HMdcGarEffMaker::setFileNameRootIn(TString myfile)
{
    // Sets root input of HMdcGarEffMaker
    fNameRootIn=myfile;
    if(fNameRootIn.CompareTo("")==0)
    {
	Error("HMdcGarEffMaker:setFileNameRootIn() ","NO ROOT INPUT  FILE SEPCIFIED!");
        exit(1);
    };
    cout<<"HMdcGarEffMaker::setFileNameRootIn()  : INPUT  FILE= "<<fNameRootIn.Data()<<endl;
}
void HMdcGarEffMaker::initVariables()
{
    // inits all variables
    fNameAsciiOut     ="";
    outputAscii       =0;
    fNameRootIn       ="";
    inputRoot         =0;
    outputRoot        =0;
    fNameAsciiOut="effmaker.txt";
    fNameRootOut ="effmaker.root";
   //setMinSignal(-60000,-65000,-380000,-530000);
    setMinSignal(- 22583900, - 22762300,-107363000,-159070000);
    resetParams();
    setNSamples(100);
    setNSteps(10);
    setVersion(2);
}
void HMdcGarEffMaker::printStatus(void)
{
    // prints the parameters to the screen
    printf ("HMdcGarEffMaker::printStatus()\n");
    printf ("Version                           :  %i\n",getVersion());
    printf ("AsciiOutput                       :  %s\n",fNameAsciiOut.Data());
    printf ("RootOutput                        :  %s\n",fNameRootOut .Data());
    printf ("RootInput                         :  %s\n",fNameRootIn  .Data());
    printf ("MinSignal                         :  %i %i %i %i \n"
	    ,(Int_t)getMinSignal(0),(Int_t)getMinSignal(1)
	    ,(Int_t)getMinSignal(2),(Int_t)getMinSignal(3));
}
void HMdcGarEffMaker::writeAscii()
{
    // Writes the produced parameters for HMdcCellEff to an
    // ascii output file

    cout<<"HMdcGarEffMaker::writeAscii()"<<endl;

    outputAscii=fopen(fNameAsciiOut.Data(),"w");

    fprintf(outputAscii,"#############################################################\n");
    fprintf(outputAscii,"# Cell efficiency parameter for HMdcDigitizer                \n");
    fprintf(outputAscii,"# format: MinSignal :  %i %i %i %i \n"
	    ,(Int_t)getMinSignal(0),(Int_t)getMinSignal(1)
	    ,(Int_t)getMinSignal(2),(Int_t)getMinSignal(3));
    fprintf(outputAscii,"# module angle p0 p1                                         \n");
    fprintf(outputAscii,"#############################################################\n");
    fprintf(outputAscii,"[MdcCellEff]\n");
    for(Int_t mdc=0;mdc<4;mdc++)
    {
	for(Int_t angle=0;angle<18;angle++)
	{
	    fprintf(outputAscii,"%i %2i  %7.5f  %7.5f \n",mdc,angle,fitpars[mdc][angle][0],fitpars[mdc][angle][1]);
	}
    }
    fprintf(outputAscii,"#############################################################\n");
    fclose(outputAscii);
}
void HMdcGarEffMaker::createHists(Int_t mdc,Int_t angle,Int_t type)
{
    // Creates th needed hists
    // type==0 -> per mdc
    // type==1 -> per angle

    Char_t namehist[300];
    Char_t titlehist[300];
    if(type==0)
    {   // per mdc
	sprintf(namehist ,"%s%i%s","heff_max[",mdc,"]");
	sprintf(titlehist,"%s%i%s","heff_max[",mdc,"]");
	heff_max= new TH1D(namehist,titlehist,20,0,20);
	heff_max->SetLineColor(colors[mdc]);

	sprintf(namehist ,"%s%i%s","heff_max_distance[",mdc,"]");
	sprintf(titlehist,"%s%i%s","heff_max_distance[",mdc,"]");
	heff_max_distance= new TH1D(namehist,titlehist,20,0,20);
	heff_max_distance->SetLineColor(colors[mdc]);

	for(Int_t i=0;i<getNSteps();i++)
	{
	    sprintf(namehist ,"%s%02i%s%i%s","heff_cut_[",(i+1)*5,"][",mdc,"]");
	    sprintf(titlehist,"%s%02i%s%i%s","heff_cut_[",(i+1)*5,"][",mdc,"]");
	    heff_cut[i]= new TH1D(namehist,titlehist,20,0,20);
	    heff_cut[i]->SetLineColor(colors[i]);
	}
    }
    if(type==1)
    {   // per angle
	sprintf(namehist ,"%s%i%s%02i%s","heff_cut_trend[",mdc,"][",angle,"]");
	sprintf(titlehist,"%s%i%s%02i%s","heff_cut_trend[",mdc,"][",angle,"]");
	heff_cut_trend= new TH1D(namehist,titlehist,60,0,60);
	heff_cut_trend->SetLineColor(colors[mdc]);

	sprintf(namehist ,"%s%i%s%02i%s","heff_time1[",mdc,"][",angle,"]");
	sprintf(titlehist,"%s%i%s%02i%s","heff_time1[",mdc,"][",angle,"]");
	heff_time1= new TH1D(namehist,titlehist,getNSamples(),0,getNSamples());
	heff_time1->SetLineColor(colors[mdc]);
	heff_time1->SetMarkerStyle(29);
	heff_time1->SetMarkerColor(2);
	heff_time1->SetMarkerSize(.8);
    }
}
void HMdcGarEffMaker::writeHists(Int_t type)
{
    // writes the created hists to an output Root file
    // type==0 -> per mdc
    // type==1 -> per angle
    if(type==0)
    {   // per mdc
	HTool::writeObject(heff_max);
	HTool::writeObject(heff_max_distance);

	for(Int_t i=0;i<getNSteps();i++)
	{
	    HTool::writeObject(heff_cut[i]);
	}
    }
    if(type==1)
    {   // per angle
	HTool::writeObject(heff_cut_trend);
	HTool::writeObject(heff_time1);
    }
}
void HMdcGarEffMaker::deleteHists(Int_t type)
{
    // Delete the created hists
    // type==0 -> per mdc
    // type==1 -> per angle
    if(type==0)
    {   // per mdc
	HTool::deleteObject(heff_max);
	HTool::deleteObject(heff_max_distance);

	for(Int_t i=0;i<getNSteps();i++)
	{
	    HTool::deleteObject(heff_cut[i]);
	}
    }
    if(type==1)
    {   // per angle
	HTool::deleteObject(heff_cut_trend);
	HTool::deleteObject(heff_time1);
    }
}
void HMdcGarEffMaker::make()
{
    // function to be called from macro.
    // opens input and output file, loops over input
    gROOT->SetBatch();
    cout<<"--------------------------------------------------------------"<<endl;
    printStatus();
    cout<<"--------------------------------------------------------------"<<endl;
    readInput();
    cout<<"--------------------------------------------------------------"<<endl;
    writeAscii();
    cout<<"--------------------------------------------------------------"<<endl;
    HTool::close(&outputRoot);
    cout<<"--------------------------------------------------------------"<<endl;
}
void HMdcGarEffMaker::readInput()
{
    // reads from root file containing signals produced by HMdcGarSignalReader
    cout<<"HMdcGarEffMaker:readInput()"<<endl;

    Char_t name[300];

    if(getVersion()==1)
    {
	if(!HTool::open(&outputRoot,fNameRootOut,"RECREATE"))
	{
	    exit(1);
	}

	outputRoot->cd();

	Char_t mypath[300];

	TDirectory* dir=0;
	for(Int_t mdc=0;mdc<4;mdc++)
	{
	    sprintf(mypath,"%s%i","mdc ",mdc);
	    dir=HTool::changeToDir(mypath);

	    createHists(mdc,0,0);
	    for(Int_t angle=0;angle<18;angle++)
	    {
		cout<<"mdc "<<mdc<<" angel "<<angle<<endl;

		sprintf(name,"%s%i%s%i%s%i%s","/u/kempter/scratchlocal1/jochen/garfield/signals/mdc",mdc+1,"/s",angle*5,"-mdc",mdc+1,"_merge.root");
                fNameRootIn=name;

		if(!HTool::open(&inputRoot,fNameRootIn,"READ"))
		{
		    exit(1);
		}
		createHists(mdc,angle,1);
		fillEffHist   (mdc,angle);
		fillCutHist   (mdc,angle);
		fillMaxHists  (angle);
		fillTrendHists(angle);
		fitTrendHists (mdc,angle);
		outputRoot->cd();
                dir=HTool::changeToDir(mypath);
		writeHists (1);
		deleteHists(1);

		HTool::close(&inputRoot);
	    }
	    outputRoot->cd();
	    dir=HTool::changeToDir(mypath);
	    writeHists (0);
	    deleteHists(0);

	    dir->cd("..");
	}
	
    }
    if(getVersion()==2)
    {
	if(!HTool::open(&outputRoot,fNameRootOut,"RECREATE"))
	{
	    exit(1);
	}

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

	outputRoot->cd();

	Char_t mypath[300];

	TDirectory* dir=0;
	for(Int_t mdc=0;mdc<4;mdc++)
	{
	    sprintf(mypath,"%s%i","mdc ",mdc);
	    dir=HTool::changeToDir(mypath);

	    createHists(mdc,0,0);
	    for(Int_t angle=0;angle<18;angle++)
	    {

		cout<<"mdc "<<mdc<<" angel "<<angle<<endl;

		createHists(mdc,angle,1);
		fillEffHist   (mdc,angle);
		fillCutHist   (mdc,angle);
		fillMaxHists  (angle);
		fillTrendHists(angle);
		fitTrendHists (mdc,angle);
		writeHists (1);
		deleteHists(1);

	    }
	    writeHists (0);
	    deleteHists(0);

	    dir->cd("..");
	}
	HTool::close(&inputRoot);
    }
}
TH1F* HMdcGarEffMaker::getHist(TFile* input,TString namehist)
{
    // Gets hist from file
    TH1F* hsum =(TH1F*)input->Get(namehist.Data());
    return hsum;
}
void HMdcGarEffMaker::fillEffHist(Int_t mdc,Int_t angle)
{
    // Fills the efficiency hists from the hist read from input file
    Char_t mypath[300];
    Char_t namehist[300];
    TString mydir="";
    TH1F* hsum =0;
    for(Int_t sample=0;sample<getNSamples()-1;sample++)  // loop over samples
    {
	if(getVersion()==1)
	{
	    sprintf(mypath  ,"%s%02i","sample ",sample);
            sprintf(namehist,"%s%s%02i%s",mypath,"/hsum[",sample,"]");

	}
	if(getVersion()==2)
	{
	    sprintf(mypath  ,"%s%i%s%02i%s%02i"  ,"mdc ",mdc,"/angle ",angle*5,"/sample ",sample);
	    sprintf(namehist,"%s%s%02i%s",mypath,"/hsum[",sample,"]");
	    sprintf(mypath  ,"%s%i%s%02i%s%02i%s","mdc ",mdc,"/angle ",angle*5,"/sample ",sample,";1");
	}

        mydir=mypath;
	if(HTool::checkDir(mydir,inputRoot))
	{
	    hsum =getHist(inputRoot,namehist);
	    if(hsum)
	    {
		heff_time1->SetBinContent(sample+1,(Double_t)hsum->Integral(0,1000));
	    }
	    HTool::deleteObject(hsum);

	}
	else continue;
    }
}
void HMdcGarEffMaker::fillCutHist(Int_t mdc,Int_t angle)
{
    // Fills the cut hists from efficiency hists
    Int_t i=1;
    for(Int_t step=0;step<getNSteps();step++)
    {
        i=1;
	while( (heff_time1->GetBinContent(getNSamples()-i)) > (getMinSignal(mdc)*(step+1)*0.05) && i<100 )
	{
	    heff_cut[step]->SetBinContent(angle+1,(getNSamples()-1-i));
            i++;
	}
    }
}
void HMdcGarEffMaker::fillMaxHists(Int_t angle)
{
    // Fills the max hists
    heff_max         ->SetBinContent(angle+1,heff_time1->GetMinimum());
    heff_max_distance->SetBinContent(angle+1,heff_time1->GetMinimumBin());
}

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