ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/AnalysisFramework/Plotting/Modules/SUSYScan.C
Revision: 1.1
Committed: Fri Jul 22 10:15:34 2011 UTC (13 years, 9 months ago) by buchmann
Content type: text/plain
Branch: MAIN
Log Message:
Moved SUSY space scan related functions to separate file

File Contents

# User Rev Content
1 buchmann 1.1 #include <iostream>
2     #include <vector>
3     #include <sys/stat.h>
4     #include <fstream>
5    
6     #include <TCut.h>
7     #include <TROOT.h>
8     #include <TCanvas.h>
9     #include <TMath.h>
10     #include <TColor.h>
11     #include <TPaveText.h>
12     #include <TRandom.h>
13     #include <TH1.h>
14     #include <TH2.h>
15     #include <TF1.h>
16     #include <TSQLResult.h>
17     #include <TProfile.h>
18    
19     //#include "TTbar_stuff.C"
20     using namespace std;
21    
22     using namespace PlottingSetup;
23    
24     void susy_scan_axis_labeling(TH2F *histo) {
25     histo->GetXaxis()->SetTitle("#Chi_{2}^{0}-LSP");
26     histo->GetXaxis()->CenterTitle();
27     histo->GetYaxis()->SetTitle("m_{#tilde{q}}");
28     histo->GetYaxis()->CenterTitle();
29     }
30    
31     void scan_susy_space(string mcjzb, string datajzb) {
32     TCanvas *c3 = new TCanvas("c3","c3");
33     vector<float> binning;
34     binning=allsamples.get_optimal_binsize(mcjzb,cutmass&&cutOSSF&&cutnJets,20,50,800);
35     float arrbinning[binning.size()];
36     for(int i=0;i<binning.size();i++) arrbinning[i]=binning[i];
37     TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
38     puredata->SetMarkerSize(DataMarkerSize);
39     TH1F *allbgs = allsamples.Draw("allbgs", "-"+datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
40     TH1F *allbgsb = allsamples.Draw("allbgsb", "-"+datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data,luminosity);
41     TH1F *allbgsc = allsamples.Draw("allbgsc", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data,luminosity);
42     allbgs->Add(allbgsb,-1);
43     allbgs->Add(allbgsc);
44     int ndata=puredata->Integral();
45     ofstream myfile;
46     myfile.open ("susyscan_log.txt");
47     TFile *susyscanfile = new TFile("/scratch/fronga/SMS/T5z_SqSqToQZQZ_38xFall10.root");
48     TTree *suevents = (TTree*)susyscanfile->Get("events");
49     TH2F *exclusionmap = new TH2F("exclusionmap","",20,0,500,20,0,1000);
50     TH2F *exclusionmap1s = new TH2F("exclusionmap1s","",20,0,500,20,0,1000);
51     TH2F *exclusionmap2s = new TH2F("exclusionmap2s","",20,0,500,20,0,1000);
52     TH2F *exclusionmap3s = new TH2F("exclusionmap3s","",20,0,500,20,0,1000);
53    
54     susy_scan_axis_labeling(exclusionmap);
55     susy_scan_axis_labeling(exclusionmap1s);
56     susy_scan_axis_labeling(exclusionmap2s);
57     susy_scan_axis_labeling(exclusionmap3s);
58    
59     Int_t MyPalette[100];
60     Double_t r[] = {0., 0.0, 1.0, 1.0, 1.0};
61     Double_t g[] = {0., 0.0, 0.0, 1.0, 1.0};
62     Double_t b[] = {0., 1.0, 0.0, 0.0, 1.0};
63     Double_t stop[] = {0., .25, .50, .75, 1.0};
64     Int_t FI = TColor::CreateGradientColorTable(5, stop, r, g, b, 100);
65     for (int i=0;i<100;i++) MyPalette[i] = FI+i;
66    
67     gStyle->SetPalette(100, MyPalette);
68    
69     for(int m23=50;m23<500;m23+=25) {
70     for (int m0=(2*(m23-50)+150);m0<=1000;m0+=50)
71     {
72     c3->cd();
73     stringstream drawcondition;
74     drawcondition << "pfJetGoodNum>=3&&(TMath::Abs(masses[0]-"<<m0<<")<10&&TMath::Abs(masses[2]-masses[3]-"<<m23<<")<10)&&mll>5&&id1==id2";
75     TH1F *puresignal = new TH1F("puresignal","puresignal",binning.size()-1,arrbinning);
76     TH1F *puresignall= new TH1F("puresignall","puresignal",binning.size()-1,arrbinning);
77     stringstream drawvar,drawvar2;
78     drawvar<<mcjzb<<">>puresignal";
79     drawvar2<<"-"<<mcjzb<<">>puresignall";
80     suevents->Draw(drawvar.str().c_str(),drawcondition.str().c_str());
81     suevents->Draw(drawvar2.str().c_str(),drawcondition.str().c_str());
82     if(puresignal->Integral()<60) {
83     delete puresignal;
84     continue;
85     }
86     puresignal->Add(puresignall,-1);//we need to correct for the signal contamination - we effectively only see (JZB>0)-(JZB<0) !!
87     puresignal->Scale(ndata/(20*puresignal->Integral()));//normalizing it to 5% of the data
88     stringstream saveas;
89     saveas<<"Model_Scan/m0_"<<m0<<"__m23_"<<m23;
90     dout << "PLEASE KEEP IN MIND THAT SIGNAL CONTAMINATION IS NOT REALLY TAKEN CARE OF YET DUE TO LOW STATISTICS! SHOULD BE SOMETHING LIKE THIS : "<< endl;
91     // TH1F *signalpredlo = allsamples.Draw("signalpredlo", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
92     // TH1F *signalpredro = allsamples.Draw("signalpredro", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
93     // TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
94     // signalpred->Add(signalpredlo,-1);
95     // signalpred->Add(signalpredro);
96     // puresignal->Add(signalpred,-1);//subtracting signal contamination
97     //---------------------
98     // dout << "(m0,m23)=("<<m0<<","<<m23<<") contains " << puresignal->Integral() << endl;
99     // TH1F *puresignal = allsamples.Draw("puresignal",mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
100     vector<float> results=establish_upper_limits(puredata,allbgs,puresignal,saveas.str(),myfile);
101     if(results.size()==0) {
102     delete puresignal;
103     continue;
104     }
105     exclusionmap->Fill(m23,m0,results[0]);
106     exclusionmap1s->Fill(m23,m0,results[1]);
107     exclusionmap2s->Fill(m23,m0,results[2]);
108     exclusionmap3s->Fill(m23,m0,results[3]);
109     delete puresignal;
110     dout << "(m0,m23)=("<<m0<<","<<m23<<") : 3 sigma at " << results[3] << endl;
111     }
112     }//end of model scan for loop
113    
114     dout << "Exclusion Map contains" << exclusionmap->Integral() << " (integral) and entries: " << exclusionmap->GetEntries() << endl;
115     c3->cd();
116     exclusionmap->Draw("CONTZ");
117     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_Mean_values");
118     exclusionmap->Draw("COLZ");
119     CompleteSave(c3,"Model_Scan/COL/Model_Scan_Mean_values");
120    
121     exclusionmap1s->Draw("CONTZ");
122     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_1sigma_values");
123     exclusionmap1s->Draw("COLZ");
124     CompleteSave(c3,"Model_Scan/COL/Model_Scan_1sigma_values");
125    
126     exclusionmap2s->Draw("CONTZ");
127     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_2sigma_values");
128     exclusionmap2s->Draw("COLZ");
129     CompleteSave(c3,"Model_Scan/COL/Model_Scan_2sigma_values");
130    
131     exclusionmap3s->Draw("CONTZ");
132     CompleteSave(c3,"Model_Scan/CONT/Model_Scan_3sigma_values");
133     exclusionmap3s->Draw("COLZ");
134     CompleteSave(c3,"Model_Scan/COL/Model_Scan_3sigma_values");
135    
136     TFile *exclusion_limits = new TFile("exclusion_limits.root","RECREATE");
137     exclusionmap->Write();
138     exclusionmap1s->Write();
139     exclusionmap2s->Write();
140     exclusionmap3s->Write();
141     exclusion_limits->Close();
142     susyscanfile->Close();
143    
144     myfile.close();
145     }
146    
147     void MCefficiencyexp(TTree *events,float &result, float &resulterr,string mcjzb,bool requireZ,string addcut="") {
148    
149     char jzbSelStr[256]; sprintf(jzbSelStr,"%f",jzbSel);
150     // All acceptance cuts at gen. level
151     TCut kbase("abs(genMll-91.2)<20&&genNjets>2&&genZPt>0&&genJZB"+geq_or_leq()+TString(jzbSelStr)+"&&genId1==-genId2");
152     if(requireZ) kbase=kbase&&"TMath::Abs(genMID)==23";
153     if(addcut!="") kbase=kbase&&addcut.c_str();//this is mostly for SUSY scans (adding requirements on masses)
154     // Corresponding reco. cuts
155     TCut ksel("abs(mll-91.2)<20&&id1==id2&&"+TString(mcjzb)+geq_or_leq()+TString(jzbSelStr));
156    
157     events->Draw(mcjzbexpression.c_str(),kbase&&ksel,"goff");
158     Float_t sel = events->GetSelectedRows();
159     events->Draw(mcjzbexpression.c_str(),kbase,"goff");
160     Float_t tot = events->GetSelectedRows();
161    
162     result=sel/tot;
163     resulterr=TMath::Sqrt(sel/tot*(1-sel/tot)/tot);
164     cout << " MC efficiency: " << result << "+-" << resulterr << std::endl;
165     }
166    
167     void efficiency_scan_in_susy_space(string mcjzb, string datajzb, bool requireZ) {
168     cout << "Doing efficiency scan using " << (scansample.collection)[0].filename << endl;
169     geqleq="geq";
170     automatized=true;
171    
172     string massgluname="MassGlu";
173     string massLSPname="MassLSP";
174    
175     Int_t MyPalette[100];
176     Double_t r[] = {0., 0.0, 1.0, 1.0, 1.0};
177     Double_t g[] = {0., 0.0, 0.0, 1.0, 1.0};
178     Double_t b[] = {0., 1.0, 0.0, 0.0, 1.0};
179     Double_t stop[] = {0., .25, .50, .75, 1.0};
180     Int_t FI = TColor::CreateGradientColorTable(5, stop, r, g, b, 100);
181     for (int i=0;i<100;i++) MyPalette[i] = FI+i;
182    
183     gStyle->SetPalette(100, MyPalette);
184    
185     // float mglustart=20;float mgluend=60;float mglustep=20; //guessed values for official file
186     // float mLSPstart=20;float mLSPend=60;float mLSPstep=20; //guessed values for official file
187     float mglustart=950;float mgluend=970;float mglustep=10;
188     float mLSPstart=825;float mLSPend=900;float mLSPstep=10;
189    
190    
191     TH2F *efficiencymap = new TH2F("efficiencymap","",(mgluend-mglustart)/mglustep+1,mglustart-0.5*mglustep,mgluend+0.5*mglustep,(mLSPend-mLSPstart)/mLSPstep+1,mLSPstart-0.5*mLSPstep,mLSPend+0.5*mLSPstep);
192     float rightmargin=gStyle->GetPadRightMargin();
193     gStyle->SetPadRightMargin(0.12);
194     TCanvas *effcanvas = new TCanvas("effcanvas","Efficiency canvas");
195     for(int mglu=mglustart;mglu<=mgluend;mglu+=mglustep) {
196     for (int mlsp=mLSPstart;mlsp<=mLSPend&&mlsp<=mglu;mlsp+=mLSPstep)
197     {
198     float result,resulterr;
199     stringstream addcut;
200     addcut << "(TMath::Abs("<<massgluname<<"-"<<mglu<<")<5)&&(TMath::Abs("<<massLSPname<<"-"<<mlsp<<")<5)";
201     MCefficiency((scansample.collection)[0].events,result,resulterr,mcjzb,requireZ,addcut.str());
202     if(result!=result||isanyinf(result)) {
203     cout << "Watch out the result for mlsp=" << mlsp << " and mglu=" << mglu << " (" << result << ") has been detected as being not a number (nan) or infinity (inf) !" << endl;
204     result=0; // kicking nan and inf errors
205     }
206     efficiencymap->Fill(mglu,mlsp,result);
207     }
208     }
209    
210     efficiencymap->GetXaxis()->SetTitle("m_{glu}");
211     efficiencymap->GetXaxis()->CenterTitle();
212     efficiencymap->GetYaxis()->SetTitle("m_{LSP}");
213     efficiencymap->GetYaxis()->CenterTitle();
214    
215    
216     efficiencymap->Draw("COLZ");
217     TText *title = write_title("Efficiency in LSP-Glu plane");
218     title->Draw();
219     CompleteSave(effcanvas,"SUSYScan/Efficency");
220     gStyle->SetPadRightMargin(rightmargin);
221     }