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