| 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 | } | 
|---|