ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/AnalysisFramework/Plotting/Modules/ResultModule.C
Revision: 1.21
Committed: Tue Dec 6 14:25:17 2011 UTC (13 years, 5 months ago) by buchmann
Content type: text/plain
Branch: MAIN
CVS Tags: cbaf_4_98ifb_paper, beforeFR20120418, cbaf_4p7ifb, HEAD
Changes since 1.20: +14 -15 lines
Log Message:
Adapted table containing separate Z+Jets and TTbar predictions

File Contents

# User Rev Content
1 buchmann 1.1 #include <iostream>
2     #include <vector>
3     #include <sys/stat.h>
4    
5     #include <TCut.h>
6     #include <TROOT.h>
7     #include <TCanvas.h>
8     #include <TMath.h>
9     #include <TColor.h>
10     #include <TPaveText.h>
11     #include <TRandom.h>
12     #include <TH1.h>
13     #include <TH2.h>
14     #include <TF1.h>
15     #include <TSQLResult.h>
16    
17     using namespace std;
18    
19     using namespace PlottingSetup;
20    
21 buchmann 1.11 void fill_result_histos(float &zossfp, float &zossfperr, float &zosofp, float &zossfn, float &zosofn, float &sbossfp, float &sbosofp, float &sbossfn, float &sbosofn,string datajzb,float cut, float cuthigh, int mcordata, float &result, vector<int> sel, samplecollection &sampleC, string addcut="") {
22 buchmann 1.5 string xlabel="JZB [GeV] -- for algoritm internal use only!";
23     bool dosignal=false;
24     if(mcordata==mcwithsignal) {
25     dosignal=true;
26     mcordata=0;
27     }
28 buchmann 1.8 TCut basiccutplus;
29     if(addcut=="") basiccutplus=basiccut;
30     else basiccutplus=basiccut&&addcut.c_str();
31 buchmann 1.6 TH1F *ZOSSFP;
32     TH1F *ZOSOFP;
33     TH1F *ZOSSFN;
34     TH1F *ZOSOFN;
35    
36     TH1F *SBOSSFP;
37     TH1F *SBOSOFP;
38     TH1F *SBOSSFN;
39     TH1F *SBOSOFN;
40    
41     if(mcordata==mc||mcordata==data||mcordata==mcwithsignal) {
42 buchmann 1.11 ZOSSFP = sampleC.Draw("ZOSSFP",datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSSF&&cutnJets&&basiccutplus,mcordata,luminosity,dosignal);
43     ZOSOFP = sampleC.Draw("ZOSOFP",datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSOF&&cutnJets&&basiccutplus,mcordata,luminosity,dosignal);
44     ZOSSFN = sampleC.Draw("ZOSSFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSSF&&cutnJets&&basiccutplus,mcordata,luminosity,dosignal);
45     ZOSOFN = sampleC.Draw("ZOSOFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSOF&&cutnJets&&basiccutplus,mcordata,luminosity,dosignal);
46    
47 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
48     if(PlottingSetup::RestrictToMassPeak) {
49     SBOSSFP = sampleC.Draw("SBOSSFP",datajzb,1,cut,cuthigh, xlabel, "events",cutOSSF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,dosignal);
50     SBOSOFP = sampleC.Draw("SBOSOFP",datajzb,1,cut,cuthigh, xlabel, "events",cutOSOF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,dosignal);
51     SBOSSFN = sampleC.Draw("SBOSSFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutOSSF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,dosignal);
52     SBOSOFN = sampleC.Draw("SBOSOFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutOSOF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,dosignal);
53     }
54 buchmann 1.6 } else {
55     //doing signal only!
56 buchmann 1.11 ZOSSFP = sampleC.Draw("ZOSSFP",datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSSF&&cutnJets&&basiccutplus,mcordata,luminosity,sel);
57     ZOSOFP = sampleC.Draw("ZOSOFP",datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSOF&&cutnJets&&basiccutplus,mcordata,luminosity,sel);
58     ZOSSFN = sampleC.Draw("ZOSSFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSSF&&cutnJets&&basiccutplus,mcordata,luminosity,sel);
59     ZOSOFN = sampleC.Draw("ZOSOFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutmass&&cutOSOF&&cutnJets&&basiccutplus,mcordata,luminosity,sel);
60    
61 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
62     if(PlottingSetup::RestrictToMassPeak) {
63     SBOSSFP = sampleC.Draw("SBOSSFP",datajzb,1,cut,cuthigh, xlabel, "events",cutOSSF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,sel);
64     SBOSOFP = sampleC.Draw("SBOSOFP",datajzb,1,cut,cuthigh, xlabel, "events",cutOSOF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,sel);
65     SBOSSFN = sampleC.Draw("SBOSSFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutOSSF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,sel);
66     SBOSOFN = sampleC.Draw("SBOSOFN","-"+datajzb,1,cut,cuthigh, xlabel, "events",cutOSOF&&cutnJets&&basiccutplus&&sidebandcut,mcordata,luminosity,sel);
67     }
68 buchmann 1.6 }
69    
70 fronga 1.9 double err; // UGH!
71 buchmann 1.10 zossfp=IntegralAndError(ZOSSFP,1,ZOSSFP->GetNbinsX(),err,"");//making this compatible with my computer which has an outdated version of root.
72 fronga 1.9 zossfperr = err;
73 buchmann 1.5 zosofp=ZOSOFP->Integral();
74     zossfn=ZOSSFN->Integral();
75     zosofn=ZOSOFN->Integral();
76    
77 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
78     if(PlottingSetup::RestrictToMassPeak) {
79     sbossfp=SBOSSFP->Integral();
80     sbosofp=SBOSOFP->Integral();
81     sbossfn=SBOSSFN->Integral();
82     sbosofn=SBOSOFN->Integral();
83     } else {
84     sbossfp=0;
85     sbosofp=0;
86     sbossfn=0;
87     sbosofn=0;
88     }
89 buchmann 1.2
90     delete ZOSSFP;
91     delete ZOSOFP;
92     delete ZOSSFN;
93     delete ZOSOFN;
94    
95 buchmann 1.15 if(PlottingSetup::RestrictToMassPeak) {
96     delete SBOSSFP;
97     delete SBOSOFP;
98     delete SBOSSFN;
99     delete SBOSOFN;
100     }
101 buchmann 1.6
102 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
103     if(PlottingSetup::RestrictToMassPeak) result = zossfn + (1.0/3.)*(zosofp-zosofn)+ (1.0/3.)*(sbossfp-sbossfn)+ (1.0/3.)*(sbosofp-sbosofn);
104     else result = zossfn + (zosofp-zosofn);
105    
106 buchmann 1.6 }
107    
108 buchmann 1.11 void fill_result_histos(float &zossfp, float &zossfperr, float &zosofp, float &zossfn, float &zosofn, float &sbossfp, float &sbosofp, float &sbossfn, float &sbosofn,string datajzb,float cut, float cuthigh, int mcordata, float &result, string addcut="") {
109 buchmann 1.6 vector<int> emptyvector;
110 buchmann 1.11 fill_result_histos(zossfp, zossfperr,zosofp, zossfn, zosofn, sbossfp, sbosofp, sbossfn, sbosofn,datajzb,cut,cuthigh,mcordata,result,emptyvector,allsamples,addcut);
111 buchmann 1.2 }
112 buchmann 1.16
113 buchmann 1.19 vector<float> get_result_between_two_fixed_jzb_values(int doquick, float cut , float cuthigh, string mcjzb,string datajzb, int mcordata,float jzbpeakerrorMC, float jzbpeakerrorData, TCanvas *rescan, bool chatty=false, bool dopoisson=false, bool writeanything=true) {
114 buchmann 1.11 /*return vector of floats
115     [0] Bpred [1] Bpred uncert [2] Observed [3] Observed error
116     // if we use this for the ratio plot we don't want to see any of the results (hence writeanything=false)
117     */
118     rescan->cd();
119     if(writeanything&&mcordata==data) dout << "***\nCrunching numbers for JZB>" << cut << " : " << endl;
120    
121     float zossfp, zossfperr, zosofp, zossfn, zosofn, sbossfp, sbosofp, sbossfn, sbosofn,result;
122     if(mcordata==mc) fill_result_histos(zossfp, zossfperr, zosofp, zossfn, zosofn, sbossfp, sbosofp, sbossfn, sbosofn,mcjzb,cut,cuthigh,mcordata,result);
123     if(mcordata==data) fill_result_histos(zossfp, zossfperr, zosofp, zossfn, zosofn, sbossfp, sbosofp, sbossfn, sbosofn,datajzb,cut,cuthigh,mcordata,result);
124     if(mcordata==mcwithsignal) fill_result_histos(zossfp, zossfperr, zosofp, zossfn, zosofn, sbossfp, sbosofp, sbossfn, sbosofn,mcjzb,cut,cuthigh,mcordata,result);
125    
126     float zossfpee, zossfpeeerr, zosofpee, zossfnee, zosofnee, sbossfpee, sbosofpee, sbossfnee, sbosofnee,resultee;
127     float zossfpmm, zossfpmmerr, zosofpmm, zossfnmm, zosofnmm, sbossfpmm, sbosofpmm, sbossfnmm, sbosofnmm,resultmm;
128     if(mcordata==data) {
129     fill_result_histos(zossfpee, zossfpeeerr, zosofpee, zossfnee, zosofnee, sbossfpee, sbosofpee, sbossfnee, sbosofnee,datajzb,cut,cuthigh,mcordata,resultee,"id1==0");
130     fill_result_histos(zossfpmm, zossfpmmerr, zosofpmm, zossfnmm, zosofnmm, sbossfpmm, sbosofpmm, sbossfnmm, sbosofnmm,datajzb,cut,cuthigh,mcordata,resultmm,"id1==1");
131     }
132    
133     float pnzossfp, pnzossfperr, pnzosofp, pnzossfn, pnzosofn, pnsbossfp, pnsbosofp, pnsbossfn, pnsbosofn, pnresult;
134     if(mcordata==mc) fill_result_histos(pnzossfp, pnzossfperr,pnzosofp, pnzossfn, pnzosofn, pnsbossfp, pnsbosofp, pnsbossfn, pnsbosofn,newjzbexpression(mcjzb,-jzbpeakerrorMC),cut,cuthigh,mcordata,pnresult);
135     if(mcordata==data) fill_result_histos(pnzossfp, pnzossfperr,pnzosofp, pnzossfn, pnzosofn, pnsbossfp, pnsbosofp, pnsbossfn, pnsbosofn,newjzbexpression(datajzb,-jzbpeakerrorData),cut,cuthigh,mcordata,pnresult);
136     if(mcordata==mcwithsignal) fill_result_histos(pnzossfp, pnzossfperr,pnzosofp, pnzossfn, pnzosofn, pnsbossfp, pnsbosofp, pnsbossfn, pnsbosofn,newjzbexpression(mcjzb,-jzbpeakerrorMC),cut,cuthigh,mcordata,pnresult);
137    
138     float syserr=0;
139     float peakerr=0;
140     float staterr=0;
141 buchmann 1.16
142     float fsyserr=0;
143     float fpeakerr=0;
144     float fstaterr=0;
145    
146 buchmann 1.11 float poissonstaterrup=-999;
147     float poissonstaterrdown=-999;
148 buchmann 1.12 // if(fabs(result-pnresult)>fabs(result-ppresult)) peakerr=fabs(result-pnresult); else peakerr=fabs(result-ppresult);
149 buchmann 1.11
150 buchmann 1.13 float zjetsestimateuncert=0.25;
151 buchmann 1.20 float emuncert=0.25;
152     float emsidebanduncert=0.25;
153     float eemmsidebanduncert=0.25;
154 buchmann 1.11 syserr = (zjetsestimateuncert*zossfn)*(zjetsestimateuncert*zossfn);//first term
155 buchmann 1.16 fsyserr = (zjetsestimateuncert*zossfp)*(zjetsestimateuncert*zossfp);//first term
156 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
157     if(PlottingSetup::RestrictToMassPeak) {
158     syserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*(1.0/9)*emuncert*emuncert;//sys err from emu method
159     syserr+= ((sbossfp)*(sbossfp)+(sbossfn)*(sbossfn))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
160     syserr+= ((sbosofp)*(sbosofp)+(sbosofn)*(sbosofn))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
161 buchmann 1.16
162     fsyserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*(1.0/9)*emuncert*emuncert;//sys err from emu method
163     fsyserr+= ((sbossfp)*(sbossfp)+(sbossfn)*(sbossfn))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
164     fsyserr+= ((sbosofp)*(sbosofp)+(sbosofn)*(sbosofn))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
165 buchmann 1.15 } else {
166     syserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
167 buchmann 1.16 fsyserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
168 buchmann 1.15 }
169    
170 buchmann 1.11 syserr=TMath::Sqrt(syserr);
171 buchmann 1.16 fsyserr=TMath::Sqrt(fsyserr);
172 buchmann 1.11
173 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
174     if(PlottingSetup::RestrictToMassPeak) {
175     staterr=TMath::Sqrt(zossfn + (1.0/9)*(zosofp+zosofn)+ (1.0/9)*(sbossfp+sbossfn)+ (1.0/9)*(sbosofp+sbosofn));
176 buchmann 1.16 fstaterr=TMath::Sqrt(zossfp + (1.0/9)*(zosofp+zosofn)+ (1.0/9)*(sbossfp+sbossfn)+ (1.0/9)*(sbosofp+sbosofn));
177 buchmann 1.15 } else {
178     staterr=TMath::Sqrt(zossfn + (zosofp+zosofn));
179 buchmann 1.16 fstaterr=TMath::Sqrt(zossfp + (zosofp+zosofn));
180 buchmann 1.15 }
181 buchmann 1.11 if(dopoisson) advanced_poisson(zossfn,zosofp,zosofn,sbossfp,sbossfn,sbosofp,sbosofn,poissonstaterrdown,poissonstaterrup);
182    
183     float e_to_emu=0.5;
184     float m_to_emu=0.5;
185    
186     if(writeanything) {
187     if(mcordata==mc) dout << " MC :: ";
188     if(mcordata==mcwithsignal) dout << " MC with S :: ";
189     if(mcordata==data) dout << " ";
190     dout << "Observed : " << zossfp << "+-" << zossfperr << endl;
191     if(mcordata==data) dout << " Composition: " << zossfpee << " (ee), " << zossfpmm << " (mm) " << endl;
192    
193     if(mcordata==mc) dout << " MC :: ";
194     if(mcordata==mcwithsignal) dout << " MC with S :: ";
195     if(mcordata==data) dout << " ";
196 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
197     if(PlottingSetup::RestrictToMassPeak) {
198     dout << "Predicted: " << zossfn << " + (1/3)*(" << zosofp << "-" << zosofn<<") [e&mu]+ (1/3)*(" << sbossfp << "-" << sbossfn<<") [SF,SB]+ (1/3)*(" << sbosofp << "-" << sbosofn<<") [OF,SB] = ";
199     dout << zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn)<< " +/- " << peakerr << " (peak ) " << " +/- " << syserr << " (sys) +/- " << staterr << " (stat)" << endl;
200     if(dopoisson) dout << " stat error with Poisson : +" << poissonstaterrup << " - " << poissonstaterrdown << endl;
201     } else {
202     dout << "Predicted: " << zossfn << " + (" << zosofp << "-" << zosofn<<") [e&mu]= ";
203     dout << zossfn + (zosofp-zosofn) << " +/- " << peakerr << " (peak ) " << " +/- " << syserr << " (sys) +/- " << staterr << " (stat)" << endl;
204     if(dopoisson) dout << " stat error with Poisson : +" << poissonstaterrup << " - " << poissonstaterrdown << endl;
205     }
206 buchmann 1.11
207     if(mcordata==data) {
208 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
209     if(PlottingSetup::RestrictToMassPeak) {
210     dout << " Composition: (ee)" << zossfnee << " + (1/3)*(" << e_to_emu*zosofp << "-" << e_to_emu*zosofn<<") ["<<e_to_emu<<"*e&mu]+ (1/3)*(" << sbossfpee << "-" << sbossfnee<<") [SF,SB]+ (1/3)*(" << sbosofp*e_to_emu << "-" << sbosofn*e_to_emu<<") ["<<e_to_emu<<"*OF,SB] = ";
211     dout << zossfnee + (1.0/3)*(e_to_emu*zosofp-e_to_emu*zosofn)+ (1.0/3)*(sbossfpee-sbossfnee) + (1.0/3)*(sbosofp*e_to_emu - sbosofn*e_to_emu) << endl;
212     dout << " (mm)" << zossfnmm << " + (1/3)*(" << m_to_emu*zosofp << "-" << m_to_emu*zosofn<<") ["<<m_to_emu<<"*e&mu]+ (1/3)*(" << sbossfpmm << "-" << sbossfnmm<<") [SF,SB]+ (1/3)*(" << sbosofp*m_to_emu << "-" << sbosofn*m_to_emu<<") ["<<m_to_emu<<"*OF,SB] = ";
213     dout << zossfnmm + (1.0/3)*(m_to_emu*zosofp - m_to_emu*zosofn) + (1.0/3)*(sbossfpmm -sbossfnmm)+ (1.0/3)*(sbosofp*m_to_emu-sbosofn*e_to_emu) << endl;
214     } else {
215     dout << " Composition: (ee)" << zossfnee << " + (" << e_to_emu*zosofp << "-" << e_to_emu*zosofn<<") ["<<e_to_emu<<"*e&mu] = ";
216     dout << zossfnee + (e_to_emu*zosofp-e_to_emu*zosofn) << endl;
217     dout << " (mm)" << zossfnmm << " + (" << m_to_emu*zosofp << "-" << m_to_emu*zosofn<<") ["<<m_to_emu<<"*e&mu] = ";
218     dout << zossfnmm + (m_to_emu*zosofp - m_to_emu*zosofn) << endl;
219     }
220 buchmann 1.11 }
221    
222     if(chatty) {
223 buchmann 1.21 dout << " Pred(JZB>0 ) \t " << zossfn << endl;
224 buchmann 1.11 dout << " Pred(e&mu;]) \t " << zosofp << "-" << zosofn << " = " << zosofp-zosofn<<endl;
225 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
226     if(PlottingSetup::RestrictToMassPeak) {
227     dout << " Pred(ossf,sb]) \t " << sbossfp << "-" << sbossfn<<" = "<<sbossfp-sbossfn<<endl;
228     dout << " Pred(osof,sb]) \t " << sbosofp << "-" << sbosofn<<" = "<<sbosofp-sbosofn<<endl;
229     }
230 buchmann 1.11 }
231     }//end of writeanything
232    
233     if(mcordata==data) {
234     //store the result!
235     Nobs.push_back(zossfp);
236 buchmann 1.16 flippedNobs.push_back(zossfn);
237 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
238 buchmann 1.16 if(PlottingSetup::RestrictToMassPeak) {
239     Npred.push_back(zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn));
240     flippedNpred.push_back(zossfp - (1.0/3)*(zosofp-zosofn) - (1.0/3)*(sbossfp-sbossfn) - (1.0/3)*(sbosofp-sbosofn));
241     } else {
242     Npred.push_back(zossfn + (zosofp-zosofn));
243 buchmann 1.17 flippedNpred.push_back(zossfp - (zosofp-zosofn));
244 buchmann 1.16 }
245 buchmann 1.11 float totprederr=0;
246     totprederr+=peakerr*peakerr;
247     totprederr+=syserr*syserr;
248     totprederr+=staterr*staterr;
249     totprederr=TMath::Sqrt(totprederr);
250     Nprederr.push_back(totprederr);
251 buchmann 1.16
252     float ftotprederr=0;
253     ftotprederr+=fpeakerr*fpeakerr;
254     ftotprederr+=fsyserr*fsyserr;
255     ftotprederr+=fstaterr*fstaterr;
256     ftotprederr=TMath::Sqrt(ftotprederr);
257     flippedNprederr.push_back(ftotprederr);
258 buchmann 1.18
259 buchmann 1.19 if(doquick<2) {//only for 2 we don't compute this
260     //also save results (for data only!) in the new Results Library class
261     int jzbcutindex=allresults.Find(cut);
262    
263 buchmann 1.21 (allresults.predictions[jzbcutindex]).Zbkg.value=zossfn-(1.0/3)*(zosofn+sbossfn+sbosofn);
264     (allresults.predictions[jzbcutindex]).Zbkg.syserror=zossfn*zossfn*zjetsestimateuncert*zjetsestimateuncert; (allresults.predictions[jzbcutindex]).Zbkg.syserror+=(1.0/9)*((zosofn)*(zosofn)*emuncert*emuncert+(sbossfn)*(sbossfn)*eemmsidebanduncert*eemmsidebanduncert+(sbosofn)*(sbosofn)*emsidebanduncert*emsidebanduncert);
265     (allresults.predictions[jzbcutindex]).Zbkg.syserror=TMath::Sqrt((allresults.predictions[jzbcutindex]).Zbkg.syserror);
266     (allresults.predictions[jzbcutindex]).Zbkg.staterror=TMath::Sqrt(zossfn+(1.0/9)*((zosofn)+(sbossfn)+(sbosofn)));
267    
268 buchmann 1.19 if(PlottingSetup::RestrictToMassPeak) {
269 buchmann 1.21 float ofsyserr= ((zosofp)*(zosofp))*(1.0/9)*emuncert*emuncert;//sys err from emu method
270     ofsyserr+= ((sbossfp)*(sbossfp))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
271     ofsyserr+= ((sbosofp)*(sbosofp))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
272 buchmann 1.19
273 buchmann 1.21 (allresults.predictions[jzbcutindex]).Flavorsym.value=(1.0/3)*(zosofp)+ (1.0/3)*(sbossfp)+ (1.0/3)*(sbosofp);
274 buchmann 1.19 (allresults.predictions[jzbcutindex]).Flavorsym.syserror=TMath::Sqrt(ofsyserr);
275 buchmann 1.21 (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((1.0/9)*(zosofp)+ (1.0/9)*(sbossfp)+ (1.0/9)*(sbosofp));
276 buchmann 1.19 } else {
277 buchmann 1.21 (allresults.predictions[jzbcutindex]).Flavorsym.value=(zosofp);
278     (allresults.predictions[jzbcutindex]).Flavorsym.syserror=(zosofp)*emuncert;
279     (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((zosofp));
280 buchmann 1.19 }
281    
282     (allresults.predictions[jzbcutindex]).total.value=(allresults.predictions[jzbcutindex]).Zbkg.value+(allresults.predictions[jzbcutindex]).Flavorsym.value;
283     (allresults.predictions[jzbcutindex]).total.syserror=syserr;
284     (allresults.predictions[jzbcutindex]).total.staterror=staterr;
285    
286     (allresults.predictions[jzbcutindex]).observed.ee=zossfpee;
287     (allresults.predictions[jzbcutindex]).observed.mm=zossfpmm;
288     (allresults.predictions[jzbcutindex]).observed.eemm=zossfp;
289 buchmann 1.18 }
290 buchmann 1.11 }
291 buchmann 1.18
292 buchmann 1.16 vector<float> resultvector; // only used for poisson computation in experimental module (therefore ignoring flipped business)
293 buchmann 1.15 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
294     if(PlottingSetup::RestrictToMassPeak) resultvector.push_back(zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn));
295     else resultvector.push_back(zossfn + (zosofp-zosofn));
296 buchmann 1.11 resultvector.push_back(TMath::Sqrt(peakerr*peakerr+syserr*syserr+staterr*staterr));
297     resultvector.push_back(zossfp);
298     resultvector.push_back(zossfperr);
299    
300     return resultvector;
301     }
302    
303 buchmann 1.19 void get_result_above_one_fixed_jzb_value(int doquick, float cut ,string mcjzb,string datajzb, int mcordata,float jzbpeakerrorMC, float jzbpeakerrorData, TCanvas *rescan, bool chatty=false, bool dopoisson=false) {
304     get_result_between_two_fixed_jzb_values(doquick, cut ,15000, mcjzb,datajzb, mcordata,jzbpeakerrorMC, jzbpeakerrorData, rescan, chatty, dopoisson);
305 buchmann 1.11 }
306 buchmann 1.1
307    
308 buchmann 1.19 void get_result(string mcjzb, string datajzb, float jzbpeakerrordata, float jzbpeakerrormc, vector<float> jzbcuts, bool chatty=false, bool dopoisson=false,int doquick=0) {
309 buchmann 1.1 TCanvas *rescan = new TCanvas("rescan","Result Canvas");
310     for(int icut=0;icut<jzbcuts.size();icut++) {
311 buchmann 1.19 get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,data,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
312     if(doquick==0) {
313     get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,mc,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
314     get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,mcwithsignal,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
315 buchmann 1.6 }
316 buchmann 1.1 }
317     delete rescan;
318     }