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

//_HADES_CLASS_DESCRIPTION 
////////////////////////////////////////////////////////////////////////////
// HMdcGarSignalReader
// Reads Ascii files containing signals produced by GARFIELD.
// Hists for Signal, integrated Signal,ditribution of Time1 and Time2,
// summed signals per sample point and summed integrated signals per sample point
// can be filled and written to the output file. Hists for maximum charge per
// mdc (angle,sample) or (angle,sample,signal) are filled to define the max value
// for the threshold calulations. The main output hists for time1 and time2 as function
// of distance from wire including the errors are filled from the distribtution hists
// for time1 and time2 (mean+RMS) for different threshold values. Those hists are input
// to HMdcGarCal2Maker and HMdcGarEffMaker to produce the CAL2 and efficiency
// parameters for MDC.
////////////////////////////////////////////////////////////////////////////
using namespace std;
#include <stdlib.h>
#include <iostream> 
#include <iomanip>
#include "hmdcgarsignalreader.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"

ClassImp(HMdcGarSignalReader)

HMdcGarSignalReader::HMdcGarSignalReader(const Char_t* name,const Char_t* title)
    : TNamed(name,title)
{
    // constructor for HMdcGarSignalReader
    initVariables();
}
HMdcGarSignalReader::~HMdcGarSignalReader()
{
  // destructor of HMdcGarSignalReader
}
void HMdcGarSignalReader::setFileNameOut(TString myfile)
{
    // Sets root output of HMdcGarSignalReader
    fNameRootOut=myfile;
    if(fNameRootOut.CompareTo("")==0)
    {
	Error("HMdcGarSignalReader:setFileNameOut()","NO OUTPUT FILE SEPCIFIED!");
        exit(1);
    };
    cout<<"HMdcGarSignalReader::setFileNameOut(): OUTPUT FILE= "<<fNameRootOut.Data()<<endl;
}
void HMdcGarSignalReader::setFileNameIn(TString myfile)
{
    // Sets root input of HMdcGarSignalReader
    fNameAsciiIn=myfile;
    if(fNameAsciiIn.CompareTo("")==0)
    {
	Error("HMdcGarSignalReader:setFileNameIn() ","NO INPUT  FILE SEPCIFIED!");
        exit(1);
    };
    cout<<"HMdcGarSignalReader::setFileNameIn() : INPUT  FILE= "<<fNameAsciiIn.Data()<<endl;
}
void HMdcGarSignalReader::initVariables()
{
    // inits all variables
    version           =704;
    fNameAsciiIn      ="";
    inputAscii        =0;
    fNameRootOut      ="";
    outputRoot        =0;
    setNBinSignal(1000);
    setRangeSignal(1000);
    setNSignals(100);
    setNBinDist(100);
    setBinSizeDist(0.1);
    setNStep(10);
    setStepSize(0.02);
    initHistArrays();
    setMinSignal(-60000,-65000,-380000,-530000);   // default for simple integration
    setWriteHists(1,1,1,1,1,1);
    hresponse=0;
    setSimResponse(kTRUE);
    setSigma1(5.);
    setSigma2(20.);

    myconfig=new TPaveText(0,0,0.995,0.995);
    myconfig->SetTextAlign(11);
    myconfig->SetBorderSize(0);
    myconfig->SetName("Configuration");
    nmake=0;


    for(Int_t i=0;i<4;i++){
	hminCharge   [i]=NULL;
	hminChargeSum[i]=NULL;
    }

}
void HMdcGarSignalReader::response(Float_t mean,Float_t scale)
{
    hresponse->Reset();
    Int_t nbins =getNBinSignal()+100;
    Float_t x;
    Float_t val;
    for(Int_t bin=0;bin<nbins;bin++)
    {
        x=hresponse->GetBinCenter(bin);
        if(x<mean){
            val= scale* ((Float_t)(-TMath::Gaus(x,mean,getSigma1())));
            if(val<-1)hresponse->SetBinContent(bin,val);
        }else{
            val= scale* ((Float_t)(-TMath::Gaus(x,mean,getSigma2())));
            if(val<-1)hresponse->SetBinContent(bin,val);
        }
    }
}
void HMdcGarSignalReader::simulateResponse(TH1F* hsignal,TH1F* hint_diff)
{
    Double_t mult=0;
    Int_t nbins =hsignal->GetNbinsX();
    Double_t x;
    for(Int_t i=0;i<nbins;i++)
    {
	mult=hsignal->GetBinContent(i);
        if(mult<0)
        {
            x=hsignal->GetBinCenter(i);
            response(x,-mult);
            hint_diff->Add(hresponse);
        }
    }
}
void HMdcGarSignalReader::createChargeHists()
{
    // creates hists for maximum charge per mdc,angle,sample,signal (per signal)
    // or mdc,angle,sample (per summed signal)
    Char_t namehist[300];
    for(Int_t mdc=0;mdc<4;mdc++)
    {
	if(hminCharge[mdc]==0)
	{
	    sprintf(namehist,"%s%i%s","hminCharge[",mdc,"]");
	    hminCharge[mdc]=new TH1F(namehist,namehist,18*getNBinDist()*getNSignals(),0,18*getNBinDist()*getNSignals());
	    hminCharge[mdc]->SetLineColor(2);
	    hminCharge[mdc]->SetDirectory(0);

	    sprintf(namehist,"%s%i%s","hminCharge_sum[",mdc,"]");
	    hminChargeSum[mdc]=new TH1F(namehist,namehist,18*getNBinDist(),0,18*getNBinDist());
	    hminChargeSum[mdc]->SetLineColor(2);
	    hminChargeSum[mdc]->SetDirectory(0);
	}
    }
}
void HMdcGarSignalReader::fillChargeHists(Int_t mdc,Int_t angle,Int_t sample,Int_t signal,Int_t type,TH1F* hsignal,TH1F* hsum)
{
    // fills hists for maximum charge per mdc,angle,sample,signal (per signal)
    // or mdc,angle,sample (per summed signal)

    if(type==0)hminCharge   [mdc]->SetBinContent(angle*getNBinDist()*getNSignals()+sample*getNSignals()+ signal +1,(Float_t)hsignal->GetMinimum());
    if(type==1)hminChargeSum[mdc]->SetBinContent(angle*getNBinDist() + sample +1                                  ,(Float_t)hsum   ->GetMinimum());
}
void HMdcGarSignalReader::writeChargeHists()
{
    // writes hists for charge to file
    if(outputRoot)
    {
        outputRoot->cd();
	for(Int_t mdc=0;mdc<4;mdc++)
	{
	    writeHist(hminCharge   [mdc],5);
	    writeHist(hminChargeSum[mdc],5);
	}
    }
}
void HMdcGarSignalReader::deleteChargeHists()
{
   // delete charge hists
   for(Int_t mdc=0;mdc<4;mdc++)
   {
       HTool::deleteObject(hminCharge   [mdc]);
       HTool::deleteObject(hminChargeSum[mdc]);
   }
}
void HMdcGarSignalReader::printStatus(void)
{
    // prints the parameters to the screen
    printf ("HMdcGarSignalReader::printStatus()\n");
    printf ("GARFIELD Version                  :  %i\n",version);
    printf ("AsciiInput                        :  %s\n",fNameAsciiIn .Data());
    printf ("RootOutput                        :  %s\n",fNameRootOut.Data());
    printf ("WriteHists                        :  %i %i %i %i %i %i \n"
	    ,(Int_t)writehists[0],(Int_t)writehists[1],(Int_t)writehists[2]
	    ,(Int_t)writehists[3],(Int_t)writehists[4],(Int_t)writehists[5]);
    printf ("SimResponse                       :  %i\n",(Int_t)simResponse);
    printf ("Sigma1 , Sigma2                   :  %5.1f , %5.1f \n",sigma1,sigma2);
 
}
void HMdcGarSignalReader::make(Int_t mdc,Int_t angle,TString inputfile)
{
    // function to be called from macro.
    // opens input and output file, loops over input

    setFileNameIn(inputfile);
    createChargeHists();

    if(!outputRoot)
    {
	HTool::open(&outputRoot,fNameRootOut,"RECREATE");
    }
    else
    {
	if(!outputRoot->IsOpen())
	{
	    Error("HMdcGarSignalReader::make()","NON ZERO FILE POINTER, BUT FILE NOT OPEN!");
            exit(1);
	}
    }
    if(!outputRoot->IsOpen())
    {
	Error("HMdcGarSignalReader::make()","NON ZERO FILE POINTER, BUT FILE NOT OPEN!");
	exit(1);
    };
    outputRoot->cd();
    Char_t mytext[300];
    if(nmake==0)
    {  // write config only the first time
        
        sprintf (mytext,"GARFIELD Version  %i\n",version);
        myconfig->AddText(mytext);
        sprintf (mytext,"RootOutput  %s\n",fNameRootOut.Data());
        myconfig->AddText(mytext);
        sprintf (mytext,"WriteHists  %i %i %i %i %i %i \n"
                ,(Int_t)writehists[0],(Int_t)writehists[1],(Int_t)writehists[2]
                ,(Int_t)writehists[3],(Int_t)writehists[4],(Int_t)writehists[5]);
        myconfig->AddText(mytext);
        sprintf (mytext,"SimResponse  %i\n",(Int_t)simResponse);
        myconfig->AddText(mytext);
        sprintf (mytext,"Sigma1 , Sigma2 %5.1f, %5.1f \n",sigma1,sigma2);
        myconfig->AddText(mytext);
        sprintf (mytext,"nSignals %i \n",getNSignals());
        myconfig->AddText(mytext);
        sprintf (mytext,"nBinSignal %i \n",getNBinSignal());
        myconfig->AddText(mytext);
        sprintf (mytext,"rangeSignal %9.3f \n",getRangeSignal());
        myconfig->AddText(mytext);
        sprintf (mytext,"nBinDist %i \n",getNBinDist());
        myconfig->AddText(mytext);
        sprintf (mytext,"binSizeDist %9.3f \n",getBinSizeDist());
        myconfig->AddText(mytext);
        sprintf (mytext,"nSteps  %i \n",getNStep());
        myconfig->AddText(mytext);
        sprintf (mytext,"stepSize  %9.3f \n",getStepSize());
        myconfig->AddText(mytext);
        sprintf (mytext,"minSignal    %9.3f, %9.3f, %9.3f, %9.3f\n",getMinSignal(0),getMinSignal(1),getMinSignal(2),getMinSignal(3));
        myconfig->AddText(mytext);
    }
    nmake++;
    sprintf (mytext,"%i. input %s\n",nmake,inputfile.Data());
    myconfig->AddText(mytext);
    cout<<"--------------------------------------------------------------"<<endl;
    printStatus();
    cout<<"--------------------------------------------------------------"<<endl;
    hresponse=new TH1F("response","response",getNBinSignal()+100,-100,getRangeSignal());
    readInput(mdc,angle);
    if(hresponse) delete hresponse;
    cout<<"--------------------------------------------------------------"<<endl;
}
void HMdcGarSignalReader::readInput(Int_t mdc,Int_t angle)
{
    // reads from ascii file containing signals produced by GARFIELD
    // Creates subdirectory structure in output file, fills and writes hists for
    // signals, time1 and time2 and max charge
    gROOT->Reset();
    gStyle->SetPalette(50);
    //######################## reading ascii from garfield ################
    TH1::AddDirectory(kFALSE);

    Char_t line[200];
    Float_t  f_time ,f_current;

    Int_t sample    =0;            // counter for sample point
    Int_t sampleold =0;            // counter for sample point
    Int_t block     =0;            // helper counter
    Int_t signal    =0;            // counter for signals of sample point
    Int_t bin       =0;            // counter for bin of hist

    TH1F* hsignal   =0;
    TH1F* hint_diff =0;
    TH1F* hsum      =0;
    TH1F* hsumint   =0;

    TDirectory* dirMdc=0;
    if(outputRoot)dirMdc=HTool::Mkdir(outputRoot,"mdc",mdc);

    TDirectory* dirAngle=0;
    if(dirMdc)dirAngle=HTool::Mkdir(dirMdc,"angle",angle*5,2);

    createHistArrays(mdc,angle,sample,1);

    TDirectory* dirSample=0;
    if(dirAngle)dirSample=HTool::Mkdir(dirAngle,"sample",sample,2);

    createHists(sample,signal,0,&hsignal,&hint_diff,&hsum,&hsumint);
    //--------------------------------- create hists per sample point ----------------
    createHistArrays(mdc,angle,sample,2);
    createHists(sample,signal,1,&hsignal,&hint_diff,&hsum,&hsumint);
    //--------------------------------------------------------------------------------



    inputAscii = fopen(fNameAsciiIn.Data(),"r");
    if (inputAscii == NULL)
    {
	Error("HMdcGarSignalReader::readInput()","Cannot open %s\n",fNameAsciiIn.Data());
	exit(1);
    }
    cout<<"HMdcGarSignalReader::readInput()   : Reading from "<<fNameAsciiIn.Data()<<endl;

    Char_t Tag []=" + VALUE_SCALE_FACTOR";
    Char_t Tag1[]="% Created";
    Char_t Tag3[]=" +";
    Int_t signalcount=0;
    Bool_t condition=kFALSE;
    Bool_t res=kTRUE;

    Int_t samplePoint = 0;
    Int_t signalNr    = 0;

    while(!feof(inputAscii))
    {   // end of file condition
	//--------------------------------- search first value ---------------------------
	while(1)
	{
	    if(feof(inputAscii)) break;
	    res=fgets(line, sizeof(line), inputAscii);
	    
	    if (!strncmp(line, Tag ,strlen(Tag))) break;  // break if " + VALUE_SCALE_FACTOR" has been found
	}
	//--------------------------------------------------------------------------------
	while(1)
	{
	    if (feof(inputAscii)) break;
	    res=fgets(line, sizeof(line), inputAscii);
	    if(!res)cout<<"readInput: could not read next line!"<<endl;
	    if(strncmp(line,Tag1,strlen(Tag1)) && !strncmp(line,Tag3,strlen(Tag3)) ) // read until "% Created" has been found
	    {
                //--------------------------------- read signal ----------------------------------
		sscanf(&line[5],"%e%e%*s",&f_time, &f_current);

		condition=kFALSE;
                if      (version==704)                    condition=kTRUE;
                else if (version==708&&(signalcount%2==0))condition=kTRUE;

                if(condition)
                {
                    hsignal->SetBinContent(bin+100,f_current);
                    bin++;
                }
	        //--------------------------------------------------------------------------------
	    }
	    else
	    {
		sscanf(&line[50],"%*s %d %*s %d%*s",&samplePoint, &signalNr);  //% Created 10/07/14 At 11.45.25 < none > SIGNAL   "p 1 n 1
                signalcount++;

                condition=kFALSE;
                if      (version==704)                        condition=kTRUE;
                else if (version==708&&((signalcount-1)%2==0))condition=kTRUE;

                if(condition)
                {

                    //--------------------------------- calculation + storage ------------------------

                    //--------------------------------------------------------------------------------
                    // old signal processing
		    if(!simResponse){
                        integrateHists(mdc,angle,sample,signal,hsignal,hint_diff);
                    }else{
                        simulateResponse(hsignal,hint_diff);
                    }
                    findThresholds(mdc,hint_diff);
                    fillChargeHists(mdc,angle,sample,signal,0,hint_diff,hsum);

                    hsum   ->Add(hsignal);
                    hsumint->Add(hint_diff);
                    //--------------------------------------------------------------------------------

                    bin=0;
                    block++;
                   // sample=(Int_t)((block-(block%getNSignals()))/getNSignals()); // count data points per curve
                   // signal=(Int_t)((block-sample*getNSignals())%getNSignals());
                    sample=samplePoint; // count data points per curve
                    signal=signalNr;
                    //--------------------------------- delete old and create new hist----------------
                    writeHist(hsignal  ,0);
                    writeHist(hint_diff,1);

                    HTool::deleteObject(hsignal);
                    HTool::deleteObject(hint_diff);

                    createHists(sample,signal,0,&hsignal,&hint_diff,&hsum,&hsumint);
                    //--------------------------------- change directorys ----------------------------
                    if(sample!=sampleold)
                    {
                        cout<<"mdc "<<mdc<<" angle "<<angle<<" sample "<<sample<<endl;
                        fillDriftTimeVersusDistance(mdc,angle,sample-1);
                        fillChargeHists(mdc,angle,sample,signal,1,hint_diff,hsumint);

                        writeHist (hsum   ,2);
                        writeHist (hsumint,2);
                        HTool::deleteObject(hsum);
                        HTool::deleteObject(hsumint);

                        writeHistArrays (2);
                        deleteHistArrays(2);

			if(dirSample){
			    dirSample->TDirectory::Cd("..");
                            dirSample->Close();
			}
			if(dirAngle)dirSample=HTool::Mkdir(dirAngle,"sample",sample,2);

                        createHistArrays(mdc,angle,sample,2);
                        createHists(sample,signal,1,&hsignal,&hint_diff,&hsum,&hsumint);

                    }
                    sampleold=sample;
                    //--------------------------------------------------------------------------------
                }
                break;
            }
        }
    }
    //---------------- very last signal of the file ----------------------------------

    if(!simResponse){
        integrateHists(mdc,angle,sample,signal,hsignal,hint_diff);
    }else{
        simulateResponse(hsignal,hint_diff);
    }

    findThresholds(mdc,hint_diff);
    fillChargeHists(mdc,angle,sample,signal,0,hint_diff,hsum);
    fillDriftTimeVersusDistance(mdc,angle,sample);

    hsum   ->Add(hsignal);
    hsumint->Add(hint_diff);

    writeHist (hsignal  ,0);
    writeHist (hint_diff,1);
    writeHist (hsum   ,2);
    writeHist (hsumint,2);

    HTool::deleteObject(hsignal);
    HTool::deleteObject(hint_diff);
    HTool::deleteObject(hsum);
    HTool::deleteObject(hsumint);

    writeHistArrays (2);
    deleteHistArrays(2);

    if(dirSample){
	dirSample->TDirectory::Cd("..");
        dirSample->Close();
    }
    writeHistArrays (1);
    deleteHistArrays(1);

    //--------------------------------------------------------------------------------

    if(dirAngle){
	dirAngle->TDirectory::Cd("..");
        dirAngle->Close();
    }
    if (dirMdc) dirMdc->TDirectory::Cd("..");

    dirSample=0;
    dirMdc   =0;
    fclose(inputAscii);
}
void HMdcGarSignalReader::fillDriftTimeVersusDistance(Int_t mdc,Int_t angle,Int_t sample)
{
    // fills main hist for time1 and time2 including errors by mean and RMS of the distribution
    // signals of time1 and time2.
    for(Int_t step=0;step<getNStep();step++)
    {
	if(sample<getNBinDist())
	{
	    if(check(mdc,angle,sample,step,hdist_1[step]))
	    {
		htime1[step]->SetBinContent(1+sample,hdist_1[step]->GetMean());
		htime1[step]->SetBinError  (1+sample,hdist_1[step]->GetRMS());
	    }
	    if(check(mdc,angle,sample,step,hdist_2[step]))
	    {
		htime2[step]->SetBinContent(1+sample,hdist_2[step]->GetMean());
		htime2[step]->SetBinError  (1+sample,hdist_2[step]->GetRMS());
	    }
	}
	else
	{
	    Error("MdcGarSignalReader::fillDifttimeVersusDistance()","MORE BINS THAN DEFINED in mdc %i angle %02i sample %02i step %i !",
		  mdc,angle,sample,step);
	    exit(1);
	}
    }
}
Bool_t HMdcGarSignalReader::check(Int_t mdc,Int_t angle,Int_t sample,Int_t step,TH1F* hdist)
{
    // checks if hist is not empty
    if(hdist->Integral()!=0 &&
       hdist->GetMean ()!=0 &&
       hdist->GetRMS  ()!=0 ) return kTRUE;
    else
    {
	Warning("MdcGarSignalReader::check()","INTGRAL, MEAN OR RMS EQUAL ZERO in mdc %i angle %02i sample %02i step %i !",
	       mdc,angle,sample,step);
	return kFALSE;
    }
}
void HMdcGarSignalReader::findThresholds(Int_t mdc,TH1F* hint_diff)
{
    // loops over signals hist to find the time value at threshold
    // for different thresholds
    Int_t bintime1,bintime2;
    Float_t percent;
    Int_t counttime1;
    Int_t counttime2;

    Int_t nbin=getNBinSignal()+100;

    for(Int_t step=0;step<getNStep();step++)
    {
	percent=getStepSize()*step;
	counttime1=0;
	counttime2=0;
	bintime1=0;
	bintime2=0;

	for(Int_t bin=1;bin<nbin;bin++)
	{
	    if(hint_diff->GetBinContent(bin)     <percent*getMinSignal(mdc))counttime1++;
	    if(hint_diff->GetBinContent(nbin-bin)<percent*getMinSignal(mdc))counttime2++;

	    if(counttime1==1)
	    {
		bintime1++;
                if(bintime1==1){
                    hdist_1[step]->SetBinContent(bin,hdist_1[step]->GetBinContent(bin)+1);
                }
            }
	    if(counttime2==1)
	    {
		bintime2++;
                if(bintime2==1)hdist_2[step]->SetBinContent(nbin-bin,hdist_2[step]->GetBinContent(nbin-bin)+1);
            }
	}
    }
}
void HMdcGarSignalReader::createHists(Int_t sample,Int_t signal,Int_t type,
				     TH1F** hsignal,TH1F** hint_diff,TH1F** hsum,TH1F** hsumint)
{
    // create hists for signal/integrated signal (type==0 per signal)
    // or sum/integrated sum(type==1 per sample)

    Int_t nbin=getNBinSignal()+100;  // changed range
    Float_t xlow=-100.;              // starting from -100 insted of 0 because of respones
    Float_t xup= getRangeSignal();
    Char_t namehist[300];
    Char_t titlehist[300];
    if(type==0)
    { // per signal
	sprintf(namehist,"%s%02i%s","hsignal[",signal,"]");
	*hsignal= new TH1F(namehist,namehist,nbin,xlow,xup); //changed
	(*hsignal)->SetFillColor(38);

	sprintf(namehist ,"%s%02i%s","hintegral_diff[",signal,"]");
	sprintf(titlehist,"%s%02i%s","hint_diff["     ,signal,"]");
	(*hint_diff) =new TH1F(namehist,titlehist,nbin,xlow,xup);
	(*hint_diff)->SetFillColor(30);
	(*hint_diff)->SetFillStyle(3013);
    }
    if(type==1)
    {   // per sample

	sprintf(namehist ,"%s%02i%s","hsum[",sample,"]");
	*hsum=new TH1F(namehist,namehist,nbin,xlow,xup);
	(*hsum)->SetFillColor(30);

	sprintf(namehist ,"%s%02i%s","hsumint[",sample,"]");
	*hsumint=new TH1F(namehist,namehist,nbin,xlow,xup);
	(*hsumint)->SetFillColor(30);
    }
}
void HMdcGarSignalReader::createHistArrays(Int_t mdc,Int_t angle,Int_t sample,Int_t type)
{
    // creates his arrays for time1 and time2 as function of distance to wire
    // for different thresholds (type==1 per angle)
    // or hists for distribution of time1 and time2 (type==2 per sample)
    //--------------------------------- create hists per sample point ----------------
    Char_t namehist[300];

    Int_t nbin=getNBinSignal()+100;
    Float_t xlow=-100.;
    Float_t xup =getRangeSignal();

    for(Int_t step=0;step<getNStep();step++)
    {
	if(type==1||type==3)
	{
	    sprintf(namehist,"%s%i%s%02i%s%02i%s","hmeandrift_time1[",mdc,"][",step,"][",angle*5,"]");
	    htime1[step]=new TH1F(namehist,namehist,getNBinDist(),0,getNBinDist()*getBinSizeDist());
	    htime1[step]->SetMarkerStyle(29);
	    htime1[step]->SetMarkerColor(2);
	    htime1[step]->SetMarkerSize(.8);

	    sprintf(namehist,"%s%i%s%02i%s%02i%s","hmeandrift_time2[",mdc,"][",step,"][",angle*5,"]");
	    htime2[step]=new TH1F(namehist,namehist,getNBinDist(),0,getNBinDist()*getBinSizeDist());
	    htime2[step]->SetMarkerStyle(29);
	    htime2[step]->SetMarkerColor(4);
	    htime2[step]->SetMarkerSize(.8);
	}
	if(type==2||type==3)
	{
	    sprintf(namehist ,"%s%i%s","hdist_1[",step,"]");
	    hdist_1[step]=new TH1F(namehist,namehist,nbin,xlow,xup);
	    hdist_1[step]->SetFillColor(46);

	    sprintf(namehist ,"%s%i%s","hdist_2[",step,"]");
	    hdist_2[step]=new TH1F(namehist,namehist,nbin,xlow,xup);
	    hdist_2[step]->SetFillColor(38);
	}
    }
}
void HMdcGarSignalReader::integrateHists(Int_t mdc,Int_t angle,Int_t sample,Int_t signal,TH1F* hsignal,TH1F* hint_diff)
{
    // ingetrate signal hist
    Int_t nbin=getNBinSignal();
    Float_t xlow=-100.;
    Float_t xup=getRangeSignal();

    TH1F* hint_time1= new TH1F("htime1","htime1",nbin,xlow,xup);
    TH1F* hint_time2= new TH1F("htime2","htime2",nbin,xlow,xup);

    hint_time1->SetBinContent(1     ,hsignal->GetBinContent(1));
    hint_time2->SetBinContent(nbin-1,hsignal->GetBinContent(nbin-1));

    for(Int_t bin=2;bin<nbin;bin++)
    {
	hint_time1->SetBinContent(bin     ,hint_time1->GetBinContent(bin-1)       +hsignal->GetBinContent(bin));
	hint_time2->SetBinContent(nbin-bin,hint_time2->GetBinContent(nbin-(bin-1))+hsignal->GetBinContent(nbin-bin));
    }
    for(Int_t bin=1;bin<nbin;bin++)
    {
	Float_t bintime2=hint_time2->GetBinContent(bin);
	Float_t bintime1=hint_time1->GetBinContent(bin);

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