53 #define SHOW_3SIGMA // plot 3 sigma probability line
54 #define PROB_3SIGMA (1./370.398) // percentage outside 3 sigma gaussian probability
68 TGraph*
GetGraph(vector<double>
x, vector<double>
y,
78 double refline=0,
TString reflabel=
"reference",
TString pfile=
"") {
81 if(pfile==
"batch") {gROOT->SetBatch(
true);pfile=
"";batch=
true;}
83 if(pfile!=
"" && !pfile.EndsWith(
".png")) {
85 cout <<
"cwb_mkcfad : Error in pfile name : " << pfile << endl;
86 cout <<
" file name must ends with .png" << endl << endl;
100 unsigned int FAP_TYPE[
MAX_FAP];
105 in.open(fapList.Data(),
ios::in);
106 if (!in.good()) {cout <<
"Error Opening File : " << fapList.Data() << endl;
exit(1);}
112 in.getline(str,1024);
113 if (!in.good())
break;
114 if(str[0] !=
'#') size++;
116 cout <<
"size " << size << endl;
117 in.clear(ios::goodbit);
118 in.seekg(0, ios::beg);
119 if (size==0) {cout <<
"Error : File " << fapList.Data() <<
" is empty" << endl;
exit(1);}
121 char iFARvsRHO[1024];
122 char iOBSTIMEvsFAR[1024];
123 char iFADvsRHO[1024];
124 char iPRODvsFAD[1024];
125 char iFAP_LABEL[1024];
132 in.getline(line,1024);
134 std::stringstream linestream(line);
135 if(
TString(line).BeginsWith(
"#"))
continue;
136 if(
TString(line)==
"")
continue;
137 if(
TString(line).BeginsWith(
"$SEARCH")) {
138 if(FAP_TYPE[nFAP]>1) nFAP++;
139 linestream >> iFAP_TAG >> iFAP_LABEL >> iFAP_COLOR >> iFAP_STYLE;
140 FAP_LABEL[nFAP]=iFAP_LABEL;
141 FAP_COLOR[nFAP]=iFAP_COLOR;
142 FAP_STYLE[nFAP]=iFAP_STYLE;
145 if(
TString(line).BeginsWith(
"$FAR")) {
146 linestream >> iFAP_TAG >> iFARvsRHO >> iOBSTIMEvsFAR;
147 FARvsRHO[nFAP]=iFARvsRHO;
148 OBSTIMEvsFAR[nFAP]=iOBSTIMEvsFAR;
151 if(
TString(line).BeginsWith(
"$FAD")) {
152 linestream >> iFAP_TAG >> iFADvsRHO >> iPRODvsFAD;
153 FADvsRHO[nFAP]=iFADvsRHO;
154 PRODvsFAD[nFAP]=iPRODvsFAD;
158 if(FAP_TYPE[nFAP]>1) nFAP++;
161 for(
int i=0;
i<nFAP;
i++) {
162 cout <<
"SEARCH : " << FAP_LABEL[
i] <<
" " << FAP_COLOR[
i] <<
" " << FAP_STYLE[
i] << endl;
163 if(FAP_TYPE[
i]&2) cout << FARvsRHO[
i] <<
" " << OBSTIMEvsFAR[
i] << endl;
164 if(FAP_TYPE[i]&4) cout << FADvsRHO[
i] <<
" " << PRODvsFAD[
i] << endl;
166 for(
int j=i;
j<nFAP;
j++)
if(FAP_TYPE[i]!=FAP_TYPE[
j]) {
167 cout <<
"cwb_mkcfap : Error - searches not consistent !!!" << endl;
168 cout <<
" Missing FAR or FAD declaration" << endl << endl;
171 if((!fapMode.Contains(
"RHO"))&&(!fapMode.Contains(
"FAR"))&&(!fapMode.Contains(
"FAD"))) {
172 cout <<
"cwb_mkcfap : Error - fapMode not contains valid declarations (FAD/FAR/RHO)" << endl;
175 if((!FAP_TYPE[i]&2)&&(fapMode.Contains(
"RHO"))) {
176 cout <<
"cwb_mkcfap : Error - fapMode=RHO needs FAR declarations" << endl;
179 if((!FAP_TYPE[i]&2)&&(fapMode.Contains(
"FAR"))) {
180 cout <<
"cwb_mkcfap : Error - fapMode=FAR needs FAR declarations" << endl;
183 if((!FAP_TYPE[i]&2)&&(fapMode.Contains(
"FAD"))) {
184 cout <<
"cwb_mkcfap : Error - fapMode=FAD needs FAD declarations" << endl;
189 if((fapMode.Contains(
"RHO"))&&(!fapMode.Contains(
"FAR"))&&(!fapMode.Contains(
"FAD"))) {
190 for(
int i=0;
i<nFAP;
i++) FAP_COLOR[
i]=2;
195 cout << endl <<
"---------------------------------------------------------------------" << endl;
196 for(
int i=0;
i<nFAP;
i++) {
198 if(FAP_TYPE[
i]&2) FAP =
GetFAP(refline, i, nFAP, FARvsRHO, OBSTIMEvsFAR);
199 if(FAP_TYPE[i]&4) FAP =
GetFAP(refline, i, nFAP, FADvsRHO, PRODvsFAD);
200 cout <<
"Search : " << FAP_LABEL[
i] <<
"\t -> FAP at RHO = " << refline <<
" is " << FAP << endl;
202 cout <<
"---------------------------------------------------------------------" << endl << endl;
208 gCANVAS =
new TCanvas(
"canvas",
"canvas",16,30,825,546);
209 gCANVAS->Range(-19.4801,-9.25,-17.4775,83.25);
210 gCANVAS->SetBorderSize(2);
211 gCANVAS->SetFrameFillColor(0);
218 gStyle->SetOptFit(kTRUE);
228 for(
int i=0;
i<nFAP;
i++) {
229 if(fapMode.Contains(
"FAD")) {
232 int xsize = xFAP[
i].size();
233 if(xsize) {
for(
int j=0;
j<xsize;
j++)
if(yFAD[i][
j]<yFAP[i][
j]) yFAP[
i][
j]=yFAD[
i][
j];}
234 else {xFAP[
i]=xFAD[
i];yFAP[
i]=yFAD[
i];}
236 if(fapMode.Contains(
"FAR")) {
238 GetFAPvsRHO(
i, xFAR[
i], yFAR[i], nFAP, FARvsRHO, OBSTIMEvsFAR);
240 int xsize = xFAP[
i].size();
241 if(xsize) {
for(
int j=0;
j<xsize;
j++)
if(yFAR[i][
j]<yFAP[i][
j]) yFAP[
i][
j]=yFAR[
i][
j];}
242 else {xFAP[
i]=xFAR[
i];yFAP[
i]=yFAR[
i];}
244 if(fapMode.Contains(
"RHO")) {
246 GetFAPvsRHO(xRHO[
i], yRHO[i], nFAP, FARvsRHO, OBSTIMEvsFAR);
248 int xsize = xFAP[
i].size();
249 if(xsize) {
for(
int j=0;
j<xsize;
j++)
if(yRHO[i][
j]<yFAP[i][
j]) yFAP[
i][
j]=yRHO[
i][
j];}
250 else {xFAP[
i]=xRHO[
i];yFAP[
i]=yRHO[
i];}
254 for(
int i=0;
i<nFAP;
i++) {
257 if(fapMode.Contains(
"FAD")) {subtitle+=
" FAD ";nMODE++;}
258 if(fapMode.Contains(
"FAR")) {subtitle+=
" FAR ";nMODE++;}
259 if(fapMode.Contains(
"RHO")) {subtitle+=
" RHO ";nMODE++;}
262 title = TString::Format(
"False Alarm Probability - ranked by %s",subtitle.Data());
264 title = TString::Format(
"False Alarm Probability - minimum FAP ranked by (%s)",subtitle.Data());
267 gr[
i] =
GetGraph(xFAP[
i],yFAP[i],title,
"IFAD",
"FAP");
269 gr[
i] =
GetGraph(xFAP[i],yFAP[i],title,
"rho",
"FAP");
271 gr[
i]->SetLineColor(FAP_COLOR[i]);
272 gr[
i]->SetLineStyle(FAP_STYLE[i]);
273 if(xFAP[i][xFAP[i].
size()-1] > rho_max) rho_max=xFAP[
i][xFAP[
i].size()-1];
277 TMultiGraph*
mg =
new TMultiGraph();
279 for(
int i=0;
i<nFAP;
i++) mg->Add(gr[
i]);
283 gr[nFAP] =
new TGraph;
284 gr[nFAP]->SetPoint(0,refline,0);
285 gr[nFAP]->SetPoint(1,refline,1);
286 gr[nFAP]->SetLineColor(kGreen);
287 gr[nFAP]->SetLineWidth(2);
293 gr[nFAP+1] =
new TGraph;
296 gr[nFAP+1]->SetLineColor(kBlue);
297 gr[nFAP+1]->SetLineWidth(2);
298 gr[nFAP+1]->SetLineStyle(10);
304 mg->GetHistogram()->GetXaxis()->SetLabelSize(0.04);
305 mg->GetHistogram()->GetYaxis()->SetLabelSize(0.04);
306 mg->GetHistogram()->GetXaxis()->SetTitleSize(0.04);
307 mg->GetHistogram()->GetYaxis()->SetTitleSize(0.04);
308 mg->GetHistogram()->GetXaxis()->SetLabelFont(42);
310 mg->GetHistogram()->GetYaxis()->SetLabelFont(42);
311 mg->GetHistogram()->GetYaxis()->SetLabelOffset(0.01);
312 mg->GetHistogram()->GetYaxis()->SetTitleOffset(1.5);
315 mg->GetXaxis()->SetLabelFont(42);
316 mg->GetYaxis()->SetLabelFont(42);
317 mg->GetXaxis()->SetTitleFont(42);
318 mg->GetYaxis()->SetTitleFont(42);
319 mg->GetXaxis()->SetTitleOffset(1.20);
320 mg->GetYaxis()->SetTitleOffset(1.05);
321 mg->GetXaxis()->SetTitleSize(0.04);
322 mg->GetYaxis()->SetTitleSize(0.04);
324 mg->GetXaxis()->SetTitle(
"IFAD");
326 mg->GetXaxis()->SetTitle(
"rho");
328 mg->GetYaxis()->SetTitle(
"FAP");
330 mg->GetXaxis()->SetMoreLogLabels();
336 double hleg = 0.84-nFAP*0.03;
337 leg =
new TLegend(0.7369062,hleg,0.9914738,0.9265385,NULL,
"brNDC");
338 leg->SetBorderSize(1);
339 leg->SetTextAlign(22);
340 leg->SetTextFont(12);
341 leg->SetLineColor(1);
342 leg->SetLineStyle(1);
343 leg->SetLineWidth(1);
344 leg->SetFillColor(0);
345 leg->SetFillStyle(1001);
346 leg->SetTextSize(0.03);
347 leg->SetLineColor(kBlack);
348 leg->SetFillColor(kWhite);
350 for(
int i=0;i<nFAP;i++) leg->AddEntry(gr[i],FAP_LABEL[i].Data(),
"lp");
351 if(refline>0) leg->AddEntry(gr[nFAP],reflabel.Data(),
"lp");
353 leg->AddEntry(gr[nFAP+1],
"3 sigma",
"lp");
360 gfile.ReplaceAll(
".png",
".gif");
361 gCANVAS->Print(gfile);
363 sprintf(cmd,
"convert %s %s",gfile.Data(),pfile.Data());
366 sprintf(cmd,
"rm %s",gfile.Data());
378 double MU = FAX*PROD;
379 double FAP = 1.-exp(-MU);
394 int nrho = TMath::Nint((rho_max-rho_min)/drho)+2;
396 for(
int i=0;
i<nrho;
i++) {
397 double RHO = rho_min+
i*drho;
401 double MU = FAX*PROD;
402 double FAP = 1.-exp(-MU);
422 for(
int j=0;
j<nFAP;
j++) {
425 if(_rho_min<rho_min) rho_min=_rho_min;
426 if(_rho_max>rho_max) rho_max=_rho_max;
432 int nrho = TMath::Nint((rho_max-rho_min)/drho)+2;
436 for(
int i=0;
i<nrho;
i++) {
437 double RHO = rho_min+
i*drho;
439 for(
int j=0;
j<nFAP;
j++) {
442 if(FAR>0)
if(FAR<MIN_FAR[j]) MIN_FAR[
j]=
FAR;
443 MU += MIN_FAR[
j]*OBSTIME;
445 double FAP = 1.-exp(-MU);
460 TGraph*
gr =
new TGraph;
465 if(y[
i]==0)
continue;
466 double dx = (x[
i]-x[
i-1])/10000.;
467 gr->SetPoint(cnt++,x[
i]-dx,y[
i-1]);
468 gr->SetPoint(cnt++,x[
i]+dx,y[
i]);
471 gr->GetHistogram()->GetXaxis()->SetTitle(xtitle.Data());
472 gr->GetHistogram()->GetYaxis()->SetTitle(ytitle.Data());
473 gr->GetHistogram()->GetYaxis()->SetTitleOffset(1.4);
475 double max=0;
double min=1e80;
477 if(y[
i]==0)
continue;
478 if(y[
i]>max) max=y[
i];
if(y[
i]<min && y[
i]!=0) min=y[
i];
481 gr->GetHistogram()->GetYaxis()->SetMoreLogLabels();
483 gr->SetTitle(ptitle);
484 gr->SetLineColor(kRed);
TGraph * GetGraph(vector< double > x, vector< double > y, TString ptitle, TString xtitle, TString ytitle)
double min(double x, double y)
double GetFAP(double rho, int n, int nFAP, TString *FAXvsRHO, TString *PRODvsFAX)
cout<< endl;cout<< "ts size = "<< ts.size()<< " ts rate = "<< ts.rate()<< endl;tf.Forward(ts, wdm);int levels=tf.getLevel();cout<< "tf size = "<< tf.size()<< endl;double dF=tf.resolution();double dT=1./(2 *dF);cout<< "rate(hz) : "<< RATE<< "\t layers : "<< nLAYERS<< "\t dF(hz) : "<< dF<< "\t dT(ms) : "<< dT *1000.<< endl;int itime=TIME_PIXEL_INDEX;int ifreq=FREQ_PIXEL_INDEX;int index=(levels+1)*itime+ifreq;double time=itime *dT;double freq=(ifreq >0)?ifreq *dF:dF/4;cout<< endl;cout<< "PIXEL TIME = "<< time<< " sec "<< endl;cout<< "PIXEL FREQ = "<< freq<< " Hz "<< endl;cout<< endl;wavearray< double > x
void cwb_mkcfad(TString fapList, TString fapMode, double rho_min=0, double rho_max=0, double refline=0, TString reflabel="reference", TString pfile="")
sprintf(tfres,"(1/%g)x(%g) (sec)x(Hz)", 2 *df, df)
void GetFAPvsRHO(int n, vector< double > &x, vector< double > &y, int nFAP, TString *FAXvsRHO, TString *PRODvsFAX)