ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/ExclusionPlot.C
(Generate patch)

Comparing UserCode/cbrown/Development/Plotting/Modules/ExclusionPlot.C (file contents):
Revision 1.2 by buchmann, Tue Mar 20 12:54:50 2012 UTC vs.
Revision 1.6 by buchmann, Wed Apr 18 09:21:36 2012 UTC

# Line 2 | Line 2
2   #include <vector>
3   #include <sys/stat.h>
4   #include <sstream>
5 + #include <assert.h>
6  
7   #include <TCut.h>
8   #include <TLatex.h>
# Line 41 | Line 42 | float indentedmargin=0.16;
42  
43   bool drawefficiencydesertline=false;
44  
45 + bool wrongwaytodothis=true;
46 +
47   string xsecfilename;
48  
49   void set_range(TH2F *histo, int scantype, bool pushoutlabels);
# Line 119 | Line 122 | void fill_with_text(TGraph *real, TGraph
122    line = new TLine(50.+75.0, 50.0+verticaloffset, 1200., 1200.0-75.0+verticaloffset);
123    line->SetLineStyle(2);
124    line->SetLineWidth(2);
125 <  line->Draw("same");
125 >  //line->Draw("same");
126 >   // Add a dashed line to indicate where x changes
127 >  float offset = 0.;
128 >  if ( 0 == scanx.compare("0.5") ) { offset = 91.2/0.5; }
129 >  else if ( 0 == scanx.compare("0.25") ) { offset = 91.2/0.25; }
130 >  else if ( 0 == scanx.compare("0.75") ) { offset = 91.2/0.75; }
131 >
132 >  if ( offset>0 ) {
133 >    line->DrawLine(50+offset, 50.0, 1200., 1200.0-offset);
134 >  }
135   }
136  
137   TH2F* prep_histo(TH2F *oldhist, int scantype) {///DONE
# Line 420 | Line 432 | void make_SMS_exclusion(TH2F *rawlimits,
432          desertline->Draw("same");
433    }
434  
435 <  TH2F *emptyh = (TH2F*)limits->Clone("emptyh");
436 <  for(int i=1;i<=emptyh->GetNbinsX();i++) {
437 <    for(int j=1;j<=emptyh->GetNbinsX();j++) {
438 <       emptyh->SetBinContent(i,j,0);
427 <    }
428 <  }
429 <
430 <  SugarCoatThis(finalcanvas,10,emptyh,exclline);
431 < //  exclline->Draw("c");
435 >  TH2F *emptyh = new TH2F("emptyh","emptyh",1,1,2,1,1,2);
436 >  
437 >  
438 >  exclline->Draw("c");
439  
440   //  fill_with_text(exclline,excllined3,excllinet3,finalcanvas,scantype,scanx);
441    stringstream real;
# Line 638 | Line 645 | TGraph* get_mSUGRA_exclusion_line(TH2F *
645          pointcounter++;
646      }
647    }
648 <  for(int i=pointcounter;i<points.size();i++) graph->SetPoint(i,lastx,lasty);
648 >  for(int i=pointcounter;i<=points.size();i++) graph->SetPoint(i,lastx,lasty);
649    if(scantype==PlottingSetup::GMSB||scantype==PlottingSetup::SMS) {
650          //The final point will be a continuation of the last one, towards the diagonal
651          float x,y;
# Line 650 | Line 657 | TGraph* get_mSUGRA_exclusion_line(TH2F *
657    return graph;
658   }
659  
660 < void draw_mSUGRA_exclusion(TH2F *crosssection, TH2F *limitmap, TH2F *expmap, TH2F *expplusmap, TH2F *expminusmap, TH2F *exp2plusmap, TH2F *exp2minusmap) {
660 > TH2F* cast_into_shape(TH2F *origin, TH2F *reference) {
661 >  TH2F *newh = (TH2F*)reference->Clone(origin->GetName());
662 >  for(int ix=1;ix<=reference->GetNbinsX();ix++) {
663 >    for(int iy=1;iy<=reference->GetNbinsY();iy++) {
664 > //      reference->SetBinContent(ix,iy,origin->GetBinContent(ix,iy));
665 >      newh->SetBinContent(ix,iy,origin->GetBinContent(ix,iy));
666 >    }
667 >  }
668 >  return newh;
669 > }
670 >
671 > void draw_mSUGRA_exclusion(TH2F *ocrosssection, TH2F *oFilterEfficiency, TH2F *oabsXS, TH2F *limitmap, TH2F *expmap, TH2F *expplusmap, TH2F *expminusmap, TH2F *exp2plusmap, TH2F *exp2minusmap) {
672 >  TH2F *crosssection = (TH2F*)ocrosssection->Clone("crosssection");
673 > //  TH2F *limitmap = (TH2F*)olimitmap->Clone(((string)olimitmap->GetName()+"clone").c_str());
674    TH2F *cleanhisto = (TH2F*)limitmap->Clone("clean");
675    for(int ix=1;ix<=cleanhisto->GetNbinsX();ix++) {
676      for(int iy=1;iy<=cleanhisto->GetNbinsY();iy++) {
677        cleanhisto->SetBinContent(ix,iy,0);
678      }
679    }
680 +  
681 +  
682 +  TH2F *FilterEfficiency;
683 +  TH2F *absXS;
684 +
685 +  
686 +  
687 +  
688 +  write_warning(__FUNCTION__,"You'll want to switch off 'wrongwaytodothis')");
689 +  
690 +  if(wrongwaytodothis) {
691 +    //this part is the one you want to remove.
692 +    TFile *Efficiencies = new TFile("FilterEfficiencyv3.root");
693 +    FilterEfficiency = cast_into_shape((TH2F*) Efficiencies->Get("FilterEfficiency"),limitmap);
694 +    assert(FilterEfficiency);
695 +    assert(crosssection);
696 +    absXS=(TH2F*)crosssection->Clone("absXS");
697 +    crosssection->Multiply(FilterEfficiency);
698 +  } else {
699 +    //this part is the one you want to keep!
700 +    FilterEfficiency=(TH2F*)oFilterEfficiency->Clone("FilterEfficiency");
701 +    absXS=(TH2F*)oabsXS->Clone("absXS");
702 +  }
703 +    
704 +  
705  
706    TH2F *limits = (TH2F*)limitmap->Clone("limits");
707    set_range(limits,true,false);
# Line 707 | Line 752 | void draw_mSUGRA_exclusion(TH2F *crossse
752    if(draw2sigma) smooth_line(expected2);
753    
754    TCanvas *te = new TCanvas("te","te");
755 +  te->SetRightMargin(standardmargin);
756   //  decorate_mSUGRA(cleanhisto,te,expected,expected2,observed);
757 <  SugarCoatThis(te,10,cleanhisto,observed);
757 >  TH2F *noh = new TH2F("noh","noh",1,1,2,1,1,2);
758 >  SugarCoatThis(te,10,noh,observed);
759   //  expected->Draw("c");
760   //  observed->Draw("c");
761    stringstream saveas;
# Line 717 | Line 764 | void draw_mSUGRA_exclusion(TH2F *crossse
764    CompleteSave(te,saveas.str());
765    delete te;
766    
767 <  TCanvas *overview = new TCanvas("overview","overview",1000,1000);
767 >  TCanvas *overview = new TCanvas("overview","overview",1500,1000);
768 >  
769    set_range(crosssection,true,false);
770    set_range(limits,true,false);
771    set_range(limitmap,true,false);
772    
773    TGraph *emptygraph = new TGraph(0);
774    
775 <  overview->Divide(2,2);
775 >  overview->Divide(3,2);
776    overview->cd(1);
777    overview->cd(1)->SetLogz(1);
778 <  crosssection->GetZaxis()->SetRangeUser(0.0001,100);
779 < //  SugarCoatThis(overview->cd(1),10,crosssection,emptygraph);
732 <  crosssection->Draw("COLZ");
778 >  absXS->GetZaxis()->SetRangeUser(0.0001,100);
779 >  absXS->Draw("COLZ");
780    TText *title0 = write_title("Cross Section");
781    title0->Draw("same");
782    overview->cd(2);
783 <  overview->cd(2)->SetLogz(1);
784 <  limits->GetZaxis()->SetRangeUser(0.1,100);
783 >  FilterEfficiency->GetZaxis()->SetRangeUser(0.01,0.7);
784 >  FilterEfficiency->Draw("COLZ");
785 >  TText *title0aa = write_title("Filter #epsilon");
786 >  title0aa->Draw("same");
787 >  overview->cd(3);
788 >  overview->cd(3)->SetLogz(1);
789 >  crosssection->GetZaxis()->SetRangeUser(0.0001,100);
790 >  crosssection->Draw("COLZ");
791 >  TText *title0a = write_title("Filter #epsilon x Cross Section");
792 >  title0a->Draw("same");
793 >  
794 >  overview->cd(4);
795 >  overview->cd(4)->SetLogz(1);
796 >  limits->GetZaxis()->SetRangeUser(0.01,100);
797    limits->Draw("COLZ");
798    TText *title1 = write_title("Cross Section Upper Limit");
799    title1->Draw("same");
800 <  overview->cd(3);
800 >  overview->cd(5);
801    limitmap->Draw("COLZ");
802    TText *title2 = write_title("UL/XS");
803    title2->Draw("same");
804    observed->Draw("c");
805 <  overview->cd(4);
805 >  overview->cd(6);
806 >  overview->cd(6)->SetRightMargin(standardmargin);
807   //  decorate_mSUGRA(cleanhisto,overview->cd(4),expected,expected2,observed);
808 <  SugarCoatThis(overview->cd(4),10,cleanhisto,observed);
808 >  SugarCoatThis(overview->cd(6),10,noh,observed);
809   //  observed->Draw("c");
810    stringstream saveas2;
811    if((int)((string)limitmap->GetName()).find("limitmap")>0) saveas2 << "Limits/exclusion_overview_for_JZB_geq_" << ((string)limitmap->GetName()).substr(((string)limitmap->GetName()).find("limitmap")+8,10);
812    else saveas2 << "Limits/exclusion_overview_for_bestlimits";
813    CompleteSave(overview,saveas2.str());
814    delete overview;
815 <
815 >  delete noh;
816 >  delete crosssection;
817 >  delete absXS;
818 >  delete FilterEfficiency;
819    
820   }
821  
# Line 862 | Line 925 | TH2F *make_best_limits(vector<TH2F*> exp
925    bestlimitsource->GetYaxis()->CenterTitle(0);
926    bestlimitsource->Draw("COL");
927    gPad->Update();
865  if(scantype!=PlottingSetup::mSUGRA) bestlimitsource->Draw("TEXT,same");
928    TLegend *sourceleg = new TLegend(0.2,0.5,0.55,0.75);
929    for(int i=0;i<explimits.size();i++) {
930      stringstream legendentry;
# Line 912 | Line 974 | void create_exclusion_plots(vector<TH2F*
974    vector<TH2F*> obslimits;
975    vector<TH2F*> flipmaps;
976    vector<TH2F*> crosssections;
977 <  
977 >  vector<TH2F*> AbsCrossSection;
978 >  vector<TH2F*> FilterEfficiencies;
979    for(int ilim=0;ilim<limits.size();ilim++) {
980      if(TString(limits[ilim]->GetName()).Contains("_explimitmap")) explimits.push_back(limits[ilim]);
981      if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_exp1plimitmap")) exp1plimits.push_back(limits[ilim]);
982      if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_exp1mlimitmap")) exp1mlimits.push_back(limits[ilim]);
983      if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_exp2plimitmap")) exp2plimits.push_back(limits[ilim]);
984      if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_exp2mlimitmap")) exp2mlimits.push_back(limits[ilim]);
985 <    if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_XS")) crosssections.push_back(limits[ilim]);
985 > //    if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_XS")) crosssections.push_back(limits[ilim]);
986 >    if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_absXS")) AbsCrossSection.push_back(limits[ilim]);
987 >    if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_FilterEfficiency")) FilterEfficiencies.push_back(limits[ilim]);
988 >    if(wrongwaytodothis) {
989 >      if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_XS")) AbsCrossSection.push_back(limits[ilim]);
990 >      if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_absXS")) crosssections  .push_back(limits[ilim]);
991 >      if(scantype==PlottingSetup::mSUGRA && TString(limits[ilim]->GetName()).Contains("_XS")) FilterEfficiencies.push_back(limits[ilim]);
992 >    }
993      if(TString(limits[ilim]->GetName()).Contains("_limitmap")) obslimits.push_back(limits[ilim]);
994   //    if(TString(limits[ilim]->GetName()).Contains("_limitflipmap")) flipmaps.push_back(limits[ilim]);
995    }
996      
997 + cout << "Size: " << AbsCrossSection.size() << endl;
998    TH2F *xsec;
999    if(scantype!=PlottingSetup::mSUGRA) xsec = adjust_histo(get_XS(xsecfilename,"gluino",limits[0]),limits[0]);
1000    vector<TH2F*> bestexplimits;
# Line 939 | Line 1010 | void create_exclusion_plots(vector<TH2F*
1010      make_SMS_exclusion(bestlimits,xsec,scantype,scanx);
1011    } else {
1012      for(int ilim=0;ilim<obslimits.size();ilim++) {
1013 <      draw_mSUGRA_exclusion(crosssections[0], obslimits[ilim], explimits[ilim], exp1mlimits[ilim], exp1plimits[ilim], exp2mlimits[ilim], exp2plimits[ilim]);
1013 >      draw_mSUGRA_exclusion(crosssections[0],FilterEfficiencies[0],AbsCrossSection[0],obslimits[ilim], explimits[ilim], exp1mlimits[ilim], exp1plimits[ilim], exp2mlimits[ilim], exp2plimits[ilim]);
1014      }
1015 <    draw_mSUGRA_exclusion(crosssections[0], bestlimits, bestexplimits[0], bestexplimits[1], bestexplimits[2], bestexplimits[3], bestexplimits[4]);
1015 >    draw_mSUGRA_exclusion(crosssections[0],FilterEfficiencies[0],AbsCrossSection[0],bestlimits, bestexplimits[0], bestexplimits[1], bestexplimits[2], bestexplimits[3], bestexplimits[4]);
1016    }
1017    delete bestlimits;
1018   }
# Line 1111 | Line 1182 | void make_all_syst_plots(vector<TH2F*> a
1182  
1183   void process_file(TFile* file, float stdmargin) {
1184    standardmargin=stdmargin;
1185 <  xsecfilename="reference_xSec_SMS-new.root";
1185 >  xsecfilename=PlottingSetup::cbafbasedir+"/"+PlottingSetup::SMSReferenceXSFile;
1186  
1187    // can receive a file with systematics and limits mixed, or a file with systematics only , or a file with limits only.
1188    TIter nextkey(file->GetListOfKeys());
# Line 1142 | Line 1213 | void process_file(TFile* file, float std
1213        if(name.Contains("exclusionmap")) is_limit=true;
1214        if(name.Contains("crosssectionmap")) is_limit=true;
1215        if(name.Contains("XS")) is_limit=true;
1216 +      if(name.Contains("absXS")) is_limit=true;
1217        if(name.Contains("limitflipmap")) is_limit=true;
1218  
1219        if(name.Contains("sysjes")) is_systematic=true;
# Line 1166 | Line 1238 | void process_file(TFile* file, float std
1238        if(name.Contains("mSUGRA")) scantype=PlottingSetup::mSUGRA;
1239        if(name.Contains("GMSB")) scantype=PlottingSetup::GMSB;
1240      }
1241 <  if(systematics_histos.size()>0) make_all_syst_plots(systematics_histos,scantype,scanx);
1241 >    write_warning(__FUNCTION__,"Deactivated systematics plots");
1242 > //  if(systematics_histos.size()>0) make_all_syst_plots(systematics_histos,scantype,scanx);
1243    if(limits_histos.size()>0) create_exclusion_plots(limits_histos,scantype,scanx);
1244   }
1245  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines