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.3 by buchmann, Fri Mar 23 10:49:23 2012 UTC vs.
Revision 1.5 by buchmann, Tue Apr 10 13:44:59 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 409 | Line 421 | void make_SMS_exclusion(TH2F *rawlimits,
421    TCanvas *finalcanvas = new TCanvas("finalcanvas","finalcanvas");
422    finalcanvas->SetLogz(1);
423    finalcanvas->cd();
424 <  finalcanvas->SetRightMargin(0.1);
413 < //  limits->Draw("COLZ");
424 >  limits->Draw("COLZ");
425  
426  
427    TLine *desertline;
# Line 423 | Line 434 | void make_SMS_exclusion(TH2F *rawlimits,
434  
435    TH2F *emptyh = new TH2F("emptyh","emptyh",1,1,2,1,1,2);
436    
437 <  SugarCoatThis(finalcanvas,10,emptyh,exclline);
438 < //  exclline->Draw("c");
437 >  
438 >  exclline->Draw("c");
439  
440   //  fill_with_text(exclline,excllined3,excllinet3,finalcanvas,scantype,scanx);
441    stringstream real;
# Line 634 | 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 646 | 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 715 | 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);
730 <  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);
806 <  overview->cd(4)->SetRightMargin(standardmargin);
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,noh,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);
# Line 752 | Line 813 | void draw_mSUGRA_exclusion(TH2F *crossse
813    CompleteSave(overview,saveas2.str());
814    delete overview;
815    delete noh;
816 <
816 >  delete crosssection;
817 >  delete absXS;
818 >  delete FilterEfficiency;
819    
820   }
821  
# Line 911 | 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 938 | 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 1141 | 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;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines