| 1 | ////////////////////////////////////////////////////////////////////////////////////
|
|---|
| 2 | //
|
|---|
| 3 | // _____ Plot Optimized cuts _____
|
|---|
| 4 | //
|
|---|
| 5 | // Take as input an output from programs/optimizeCuts and plot the results
|
|---|
| 6 | // You only need to specify the input file name
|
|---|
| 7 | //
|
|---|
| 8 | // Jose Flix <jflix@ifae.es>
|
|---|
| 9 | // Javier Rico <jrico@ifae.es>
|
|---|
| 10 | ////////////////////////////////////////////////////////////////////////////////////
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 | void plotOptimal(TString fname="optimize.out")
|
|---|
| 14 | {
|
|---|
| 15 | gROOT->Reset();
|
|---|
| 16 | gStyle->SetCanvasColor(0);
|
|---|
| 17 | gStyle->SetCanvasBorderMode(0);
|
|---|
| 18 | gStyle->SetPadBorderMode(0);
|
|---|
| 19 | gStyle->SetFrameBorderMode(0);
|
|---|
| 20 | gStyle->SetOptStat(000000);
|
|---|
| 21 | gStyle->SetPalette(1);
|
|---|
| 22 |
|
|---|
| 23 | ifstream ifun(fname.Data());
|
|---|
| 24 | Float_t width,length,excess,significance;
|
|---|
| 25 |
|
|---|
| 26 | Float_t wmin=9999999;
|
|---|
| 27 | Float_t lmin=9999999;
|
|---|
| 28 | Float_t wmax=-9999999;
|
|---|
| 29 | Float_t lmax=-9999999;
|
|---|
| 30 | Float_t emax=-9999999;
|
|---|
| 31 | Float_t smax=-9999999;
|
|---|
| 32 |
|
|---|
| 33 | Float_t dw=-1;
|
|---|
| 34 | Float_t dl=-1;
|
|---|
| 35 | Float_t prevw=-1;
|
|---|
| 36 | Float_t prevl=-1;
|
|---|
| 37 |
|
|---|
| 38 | // first loop to get parameters
|
|---|
| 39 | Int_t i=0;
|
|---|
| 40 | while(ifun >> width)
|
|---|
| 41 | {
|
|---|
| 42 | // read data
|
|---|
| 43 | ifun >> length;
|
|---|
| 44 | ifun >> excess;
|
|---|
| 45 | ifun >> significance;
|
|---|
| 46 |
|
|---|
| 47 | // keep max/min
|
|---|
| 48 | if(width<wmin) wmin=width;
|
|---|
| 49 | if(length<lmin) lmin=length;
|
|---|
| 50 | if(width>wmax) wmax=width;
|
|---|
| 51 | if(length>lmax) lmax=length;
|
|---|
| 52 | if(significance>smax)
|
|---|
| 53 | {
|
|---|
| 54 | smax=significance;
|
|---|
| 55 | emax=excess;
|
|---|
| 56 | }
|
|---|
| 57 |
|
|---|
| 58 | if(width!=prevw) dw=width-prevw;
|
|---|
| 59 | if(length!=prevl) dl=length-prevl;
|
|---|
| 60 |
|
|---|
| 61 | prevw=width;
|
|---|
| 62 | prevl=length;
|
|---|
| 63 | i++;
|
|---|
| 64 | }
|
|---|
| 65 | ifun.close();
|
|---|
| 66 |
|
|---|
| 67 | cout << "wmin: " << wmin << ", wmax: " << wmax+dw << ", lmin: " << lmin << ", lmax: " << lmax+dl << endl;
|
|---|
| 68 |
|
|---|
| 69 | // define histos
|
|---|
| 70 | Int_t nx = TMath::Nint((wmax-wmin)/dw)+1;
|
|---|
| 71 | Int_t ny = TMath::Nint((lmax-lmin)/dl)+1;
|
|---|
| 72 | TH2F *ex = new TH2F("Excess","Excess",nx,wmin,wmax+dw,ny,lmin,lmax+dl);
|
|---|
| 73 | TH2F *sig = new TH2F("Significance","Significance",nx,wmin,wmax+dw,ny,lmin,lmax+dl);
|
|---|
| 74 |
|
|---|
| 75 | cout << "nx: " << nx << ", ny: " << ny << endl;
|
|---|
| 76 | cout << "dw: " << dw << ", dl: " << dl << endl;
|
|---|
| 77 |
|
|---|
| 78 | ifstream ifun2;
|
|---|
| 79 | ifun2.open(fname.Data());
|
|---|
| 80 |
|
|---|
| 81 | // second loop to fill the histograms
|
|---|
| 82 | Float_t wopt,lopt,eopt;
|
|---|
| 83 | while(ifun2 >> width)
|
|---|
| 84 | {
|
|---|
| 85 | // read data
|
|---|
| 86 | ifun2 >> length;
|
|---|
| 87 | ifun2 >> excess;
|
|---|
| 88 | ifun2 >> significance;
|
|---|
| 89 |
|
|---|
| 90 | cout << "Width: " << width << '\t' << "Length: " << length << '\t' << "Excess: " << excess << '\t' << "Significance: " << significance;
|
|---|
| 91 | if(significance==smax)
|
|---|
| 92 | {
|
|---|
| 93 | cout << " *****";
|
|---|
| 94 | wopt=width;
|
|---|
| 95 | lopt=length;
|
|---|
| 96 | eopt=excess;
|
|---|
| 97 | }
|
|---|
| 98 |
|
|---|
| 99 | cout << endl;
|
|---|
| 100 |
|
|---|
| 101 | Int_t binx = TMath::Nint(((width-wmin)/dw));
|
|---|
| 102 | Int_t biny = TMath::Nint(((length-lmin)/dl));
|
|---|
| 103 |
|
|---|
| 104 | // cout << "binnx: " << binx+1 << ", biny: " << biny+1 << endl;
|
|---|
| 105 |
|
|---|
| 106 | ex->SetBinContent(binx+1,biny+1,excess+.00001);
|
|---|
| 107 | sig->SetBinContent(binx+1,biny+1,significance+.00001);
|
|---|
| 108 | }
|
|---|
| 109 | cout << "Maximal significance: " << smax << " (excess=" << eopt << ") for width="<<wopt<<", length=" << lopt << endl;
|
|---|
| 110 |
|
|---|
| 111 | // plot
|
|---|
| 112 | TCanvas *c3 = new TCanvas("c3","c3",0,0,500,750);
|
|---|
| 113 | c3->Divide(1,2);
|
|---|
| 114 |
|
|---|
| 115 | c3->cd(1);
|
|---|
| 116 | ex->GetXaxis()->SetTitle("Width (degrees)");
|
|---|
| 117 | ex->GetYaxis()->SetTitle("Length (degrees)");
|
|---|
| 118 | ex->Draw("colz");
|
|---|
| 119 |
|
|---|
| 120 | c3->cd(2);
|
|---|
| 121 | sig->GetXaxis()->SetTitle("Width (degrees)");
|
|---|
| 122 | sig->GetYaxis()->SetTitle("Length (degrees)");
|
|---|
| 123 | sig->Draw("colz");
|
|---|
| 124 | }
|
|---|