286 |
|
|
287 |
|
void get_Marias_exclusion_line(TH2F *limit_ref, float pointsX[200], float pointsY[200], int &ixNew, int &counter, int &foundDiag) { |
288 |
|
// part of Mariarosaria's getRefXsecGraph function |
289 |
– |
double refMult = 3.0; |
289 |
|
bool enough = false; |
290 |
|
Int_t nBinX= limit_ref->GetXaxis()->GetNbins(); |
291 |
|
Int_t nBinY= limit_ref->GetYaxis()->GetNbins(); |
296 |
|
if(limit_ref->GetBinContent(i,j)==0) continue; |
297 |
|
if( limit_ref->GetBinContent(i,j)>0. && limit_ref->GetBinContent(i,j)<=1.) { |
298 |
|
double xsLimitAbove = limit_ref->GetBinContent(i, j+1); |
300 |
– |
double xsLimitBelow = limit_ref->GetBinContent(i, j-1); |
299 |
|
|
300 |
|
double xsLimit = limit_ref->GetBinContent(i, j); |
301 |
|
if((fail(1.0,xsLimitAbove)) && (!fail(1.0,xsLimit)) ) { |
470 |
|
desertline->Draw("same"); |
471 |
|
} |
472 |
|
|
475 |
– |
TH2F *emptyh = new TH2F("emptyh","emptyh",1,1,2,1,1,2); |
476 |
– |
|
477 |
– |
|
473 |
|
exclline->Draw("c"); |
474 |
|
|
475 |
|
// fill_with_text(exclline,excllined3,excllinet3,finalcanvas,scantype,scanx); |
505 |
|
if(!file0) return hpt_; |
506 |
|
TDirectory *dir; |
507 |
|
TH2D * hMuPt; |
513 |
– |
TH1* H; |
508 |
|
|
509 |
|
if(dirName == "0") { |
510 |
|
hMuPt = (TH2D*) file0->Get(histoName); |
637 |
|
for(int i=1;i<exclusionhisto->GetNbinsX();i++) { |
638 |
|
pair<float,float> anything = find_point(exclusionhisto,i); |
639 |
|
pair<float,float> intthing = find_interpolated_point(exclusionhisto,i); |
646 |
– |
float value=anything.second; |
640 |
|
if(intthing.second>anything.second) anything.second=intthing.second; |
641 |
|
if(anything.second>100&&anything.second<1500) points.push_back(anything); |
642 |
|
} |
654 |
|
float lastx2=0; |
655 |
|
float lasty2=0; |
656 |
|
|
657 |
< |
for(int i=0;i<points.size();i++) { |
657 |
> |
for(int i=0;i<(int)points.size();i++) { |
658 |
|
xpoints[i]=points[i].first; |
659 |
|
spoints[i]=points[i].second; |
660 |
|
if(scantype==PlottingSetup::mSUGRA) { |
661 |
< |
if(i>1&&i<points.size()-1) spoints[i]=(1.0/3.0)*(points[i-1].second+points[i].second+points[i+1].second); |
662 |
< |
if(i>2&&i<points.size()-2) spoints[i]=(1.0/5.0)*(points[i-2].second+points[i-1].second+points[i].second+points[i+1].second+points[i+2].second); |
663 |
< |
if(i>3&&i<points.size()-3) spoints[i]=(1.0/7.0)*(points[i-3].second+points[i-2].second+points[i-1].second+points[i].second+points[i+1].second+points[i+2].second+points[i+3].second); |
661 |
> |
if(i>1&&i<(int)points.size()-1) spoints[i]=(1.0/3.0)*(points[i-1].second+points[i].second+points[i+1].second); |
662 |
> |
if(i>2&&i<(int)points.size()-2) spoints[i]=(1.0/5.0)*(points[i-2].second+points[i-1].second+points[i].second+points[i+1].second+points[i+2].second); |
663 |
> |
if(i>3&&i<(int)points.size()-3) spoints[i]=(1.0/7.0)*(points[i-3].second+points[i-2].second+points[i-1].second+points[i].second+points[i+1].second+points[i+2].second+points[i+3].second); |
664 |
|
} |
665 |
|
|
666 |
|
bool usethispoint=true; |
678 |
|
pointcounter++; |
679 |
|
} |
680 |
|
} |
681 |
< |
for(int i=pointcounter;i<=points.size();i++) graph->SetPoint(i,lastx,lasty); |
681 |
> |
for(int i=pointcounter;i<=(int)points.size();i++) graph->SetPoint(i,lastx,lasty); |
682 |
|
if(scantype==PlottingSetup::GMSB||scantype==PlottingSetup::SMS) { |
683 |
|
//The final point will be a continuation of the last one, towards the diagonal |
684 |
|
float x,y; |
803 |
|
set_range(limits,true,false); |
804 |
|
set_range(limitmap,true,false); |
805 |
|
|
813 |
– |
TGraph *emptygraph = new TGraph(0); |
814 |
– |
|
806 |
|
overview->Divide(3,2); |
807 |
|
overview->cd(1); |
808 |
|
overview->cd(1)->SetLogz(1); |
893 |
|
|
894 |
|
float findmaxentry(vector<TH2F*> histos, int i, int j) { |
895 |
|
float max = histos[0]->GetBinContent(i,j); |
896 |
< |
for(int k=0;k<histos.size();k++) { |
896 |
> |
for(int k=0;k<(int)histos.size();k++) { |
897 |
|
float entry = histos[k]->GetBinContent(i,j); |
898 |
|
if(entry>=max) max=entry; |
899 |
|
} |
909 |
|
} |
910 |
|
if(explimits.size()==0) { |
911 |
|
write_warning(__FUNCTION__,"There are no expected limits! Will compute best limits based on observed limits! (WATCH OUT THIS IS DISCOURAGED!"); |
912 |
< |
for(int i=0;i<obslimits.size();i++) explimits.push_back(obslimits[i]); |
912 |
> |
for(int i=0;i<(int)obslimits.size();i++) explimits.push_back(obslimits[i]); |
913 |
|
} |
914 |
|
TH2F *bestlimit=(TH2F*)obslimits[0]->Clone("bestlimits"); |
915 |
|
TH2F *bestexplimit=(TH2F*)obslimits[0]->Clone("bestexplimits"); |
924 |
|
float min=findmaxentry(explimits,i,j); |
925 |
|
float omin=obslimits[0]->GetBinContent(i,j); |
926 |
|
int source=0; |
927 |
< |
for(int k=0;k<explimits.size();k++) { |
927 |
> |
for(int k=0;k<(int)explimits.size();k++) { |
928 |
|
float currlim=explimits[k]->GetBinContent(i,j); |
929 |
|
if(currlim<=min&&currlim>0) { |
930 |
|
min=currlim; |
957 |
|
bestlimitsource->Draw("COL"); |
958 |
|
gPad->Update(); |
959 |
|
TLegend *sourceleg = new TLegend(0.2,0.5,0.55,0.75); |
960 |
< |
for(int i=0;i<explimits.size();i++) { |
960 |
> |
for(int i=0;i<(int)explimits.size();i++) { |
961 |
|
stringstream legendentry; |
962 |
|
legendentry << i+1 << " = " << give_nice_source_label(explimits[i]->GetName()); |
963 |
|
Int_t currcol=get_exclusion_region_color(i+1,bestlimitsource); |
995 |
|
} |
996 |
|
xsecfile->Close(); |
997 |
|
} |
998 |
< |
if(scantype!=PlottingSetup::mSUGRA) for(int i=0;i<limits.size();i++) limits[i]->Scale(1./0.19); // because for T5zz we forced one z to decay leptonically |
998 |
> |
if(scantype!=PlottingSetup::mSUGRA) for(int i=0;i<(int)limits.size();i++) limits[i]->Scale(1./0.19); // because for T5zz we forced one z to decay leptonically |
999 |
|
|
1000 |
|
vector<TH2F*> explimits; |
1001 |
|
vector<TH2F*> exp1mlimits; |
1007 |
|
vector<TH2F*> crosssections; |
1008 |
|
vector<TH2F*> AbsCrossSection; |
1009 |
|
vector<TH2F*> FilterEfficiencies; |
1010 |
< |
for(int ilim=0;ilim<limits.size();ilim++) { |
1010 |
> |
for(int ilim=0;ilim<(int)limits.size();ilim++) { |
1011 |
|
if(TString(limits[ilim]->GetName()).Contains("_explimitmap")) explimits.push_back(limits[ilim]); |
1012 |
|
if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_exp1plimitmap")) exp1plimits.push_back(limits[ilim]); |
1013 |
|
if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_exp1mlimitmap")) exp1mlimits.push_back(limits[ilim]); |
1032 |
|
TH2F *bestlimits = make_best_limits(explimits,obslimits,scantype, scanx, exp1mlimits, exp1plimits, exp2mlimits, exp2plimits, bestexplimits); |
1033 |
|
bestlimits->GetZaxis()->SetRangeUser(limits_lower_bound,limits_upper_bound); |
1034 |
|
|
1035 |
< |
for(int ilim=0;ilim<limits.size();ilim++) { |
1035 |
> |
for(int ilim=0;ilim<(int)limits.size();ilim++) { |
1036 |
|
limits[ilim]->GetZaxis()->SetRangeUser(limits_lower_bound,limits_upper_bound); |
1037 |
|
} |
1038 |
|
|
1039 |
|
if(scantype!=PlottingSetup::mSUGRA) { |
1040 |
< |
for(int ilim=0;ilim<obslimits.size();ilim++) make_SMS_exclusion(obslimits[ilim],xsec,scantype,scanx); |
1040 |
> |
for(int ilim=0;ilim<(int)obslimits.size();ilim++) make_SMS_exclusion(obslimits[ilim],xsec,scantype,scanx); |
1041 |
|
make_SMS_exclusion(bestlimits,xsec,scantype,scanx); |
1042 |
|
} else { |
1043 |
< |
for(int ilim=0;ilim<obslimits.size();ilim++) { |
1043 |
> |
for(int ilim=0;ilim<(int)obslimits.size();ilim++) { |
1044 |
|
draw_mSUGRA_exclusion(crosssections[0],FilterEfficiencies[0],AbsCrossSection[0],obslimits[ilim], explimits[ilim], exp1mlimits[ilim], exp1plimits[ilim], exp2mlimits[ilim], exp2plimits[ilim]); |
1045 |
|
} |
1046 |
|
draw_mSUGRA_exclusion(crosssections[0],FilterEfficiencies[0],AbsCrossSection[0],bestlimits, bestexplimits[0], bestexplimits[1], bestexplimits[2], bestexplimits[3], bestexplimits[4]); |
1056 |
|
int sign=1; |
1057 |
|
for(int i=0;i<gr->GetN();i++) { |
1058 |
|
Double_t x,y,x1,y1,x2,y2; |
1068 |
– |
bool turning=false; |
1059 |
|
gr->GetPoint(i,x,y); |
1060 |
|
gr->GetPoint(i+1,x1,y1);//need to handle exception here |
1061 |
|
gr->GetPoint(i-1,x2,y2);//need to handle exception here |
1209 |
|
|
1210 |
|
void make_all_syst_plots(vector<TH2F*> all_histos,int scantype,std::string& scanx) { |
1211 |
|
string saveto="Systematics/"; |
1212 |
< |
for(int iplot=0;iplot<all_histos.size();iplot++) { |
1212 |
> |
for(int iplot=0;iplot<(int)all_histos.size();iplot++) { |
1213 |
|
process_syst_plot(all_histos[iplot],saveto,scantype,scanx); |
1214 |
|
} |
1215 |
|
} |