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)
{
    
    initVariables();
}
HMdcGarSignalReader::~HMdcGarSignalReader()
{
  
}
void HMdcGarSignalReader::setFileNameOut(TString myfile)
{
    
    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)
{
    
    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()
{
    
    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);   
    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()
{
    
    
    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)
{
    
    
    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()
{
    
    if(outputRoot)
    {
        outputRoot->cd();
	for(Int_t mdc=0;mdc<4;mdc++)
	{
	    writeHist(hminCharge   [mdc],5);
	    writeHist(hminChargeSum[mdc],5);
	}
    }
}
void HMdcGarSignalReader::deleteChargeHists()
{
   
   for(Int_t mdc=0;mdc<4;mdc++)
   {
       HTool::deleteObject(hminCharge   [mdc]);
       HTool::deleteObject(hminChargeSum[mdc]);
   }
}
void HMdcGarSignalReader::printStatus(void)
{
    
    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)
{
    
    
    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)
    {  
        
        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)
{
    
    
    
    gROOT->Reset();
    gStyle->SetPalette(50);
    
    TH1::AddDirectory(kFALSE);
    Char_t line[200];
    Float_t  f_time ,f_current;
    Int_t sample    =0;            
    Int_t sampleold =0;            
    Int_t block     =0;            
    Int_t signal    =0;            
    Int_t bin       =0;            
    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);
    
    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))
    {   
	
	while(1)
	{
	    if(feof(inputAscii)) break;
	    res=fgets(line, sizeof(line), inputAscii);
	    
	    if (!strncmp(line, Tag ,strlen(Tag))) break;  
	}
	
	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)) ) 
	    {
                
		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);  
                signalcount++;
                condition=kFALSE;
                if      (version==704)                        condition=kTRUE;
                else if (version==708&&((signalcount-1)%2==0))condition=kTRUE;
                if(condition)
                {
                    
                    
                    
		    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=samplePoint; 
                    signal=signalNr;
                    
                    writeHist(hsignal  ,0);
                    writeHist(hint_diff,1);
                    HTool::deleteObject(hsignal);
                    HTool::deleteObject(hint_diff);
                    createHists(sample,signal,0,&hsignal,&hint_diff,&hsum,&hsumint);
                    
                    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;
            }
        }
    }
    
    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)
{
    
    
    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)
{
    
    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)
{
    
    
    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)
{
    
    
    Int_t nbin=getNBinSignal()+100;  
    Float_t xlow=-100.;              
    Float_t xup= getRangeSignal();
    Char_t namehist[300];
    Char_t titlehist[300];
    if(type==0)
    { 
	sprintf(namehist,"%s%02i%s","hsignal[",signal,"]");
	*hsignal= new TH1F(namehist,namehist,nbin,xlow,xup); 
	(*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)
    {   
	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)
{
    
    
    
    
    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)
{
    
    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()
{
    
    myconfig->AddText("");
    myconfig->Write();
    writeChargeHists();
    deleteChargeHists();
    HTool::close(&outputRoot);
}
 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