ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/ResultModule.C
Revision: 1.2
Committed: Tue Apr 10 13:43:13 2012 UTC (13 years, 1 month ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.1: +6 -0 lines
Log Message:
Adapted the emu uncertainty

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     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     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     TCut basiccutplus;
29     if(addcut=="") basiccutplus=basiccut;
30     else basiccutplus=basiccut&&addcut.c_str();
31     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     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     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     } else {
55     //doing signal only!
56     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     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     }
69    
70     double err; // UGH!
71     zossfp=IntegralAndError(ZOSSFP,1,ZOSSFP->GetNbinsX(),err,"");//making this compatible with my computer which has an outdated version of root.
72     zossfperr = err;
73     zosofp=ZOSOFP->Integral();
74     zossfn=ZOSSFN->Integral();
75     zosofn=ZOSOFN->Integral();
76    
77     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    
90     delete ZOSSFP;
91     delete ZOSOFP;
92     delete ZOSSFN;
93     delete ZOSOFN;
94    
95     if(PlottingSetup::RestrictToMassPeak) {
96     delete SBOSSFP;
97     delete SBOSOFP;
98     delete SBOSSFN;
99     delete SBOSOFN;
100     }
101    
102     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     }
107    
108     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     vector<int> emptyvector;
110     fill_result_histos(zossfp, zossfperr,zosofp, zossfn, zosofn, sbossfp, sbosofp, sbossfn, sbosofn,datajzb,cut,cuthigh,mcordata,result,emptyvector,allsamples,addcut);
111     }
112    
113     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     /*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    
142     float fsyserr=0;
143     float fpeakerr=0;
144     float fstaterr=0;
145    
146     float poissonstaterrup=-999;
147     float poissonstaterrdown=-999;
148     // if(fabs(result-pnresult)>fabs(result-ppresult)) peakerr=fabs(result-pnresult); else peakerr=fabs(result-ppresult);
149    
150     float zjetsestimateuncert=0.25;
151     float emuncert=0.25;
152     float emsidebanduncert=0.25;
153     float eemmsidebanduncert=0.25;
154 buchmann 1.2
155     if(!PlottingSetup::RestrictToMassPeak) {
156     emuncert=0.1;
157     emsidebanduncert=0.0;
158     eemmsidebanduncert=0.0;
159     }
160 buchmann 1.1 syserr = (zjetsestimateuncert*zossfn)*(zjetsestimateuncert*zossfn);//first term
161     fsyserr = (zjetsestimateuncert*zossfp)*(zjetsestimateuncert*zossfp);//first term
162     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
163     if(PlottingSetup::RestrictToMassPeak) {
164     syserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*(1.0/9)*emuncert*emuncert;//sys err from emu method
165     syserr+= ((sbossfp)*(sbossfp)+(sbossfn)*(sbossfn))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
166     syserr+= ((sbosofp)*(sbosofp)+(sbosofn)*(sbosofn))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
167    
168     fsyserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*(1.0/9)*emuncert*emuncert;//sys err from emu method
169     fsyserr+= ((sbossfp)*(sbossfp)+(sbossfn)*(sbossfn))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
170     fsyserr+= ((sbosofp)*(sbosofp)+(sbosofn)*(sbosofn))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
171     } else {
172     syserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
173     fsyserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
174     }
175    
176     syserr=TMath::Sqrt(syserr);
177     fsyserr=TMath::Sqrt(fsyserr);
178    
179     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
180     if(PlottingSetup::RestrictToMassPeak) {
181     staterr=TMath::Sqrt(zossfn + (1.0/9)*(zosofp+zosofn)+ (1.0/9)*(sbossfp+sbossfn)+ (1.0/9)*(sbosofp+sbosofn));
182     fstaterr=TMath::Sqrt(zossfp + (1.0/9)*(zosofp+zosofn)+ (1.0/9)*(sbossfp+sbossfn)+ (1.0/9)*(sbosofp+sbosofn));
183     } else {
184     staterr=TMath::Sqrt(zossfn + (zosofp+zosofn));
185     fstaterr=TMath::Sqrt(zossfp + (zosofp+zosofn));
186     }
187     if(dopoisson) advanced_poisson(zossfn,zosofp,zosofn,sbossfp,sbossfn,sbosofp,sbosofn,poissonstaterrdown,poissonstaterrup);
188    
189     float e_to_emu=0.5;
190     float m_to_emu=0.5;
191    
192     if(writeanything) {
193     if(mcordata==mc) dout << " MC :: ";
194     if(mcordata==mcwithsignal) dout << " MC with S :: ";
195     if(mcordata==data) dout << " ";
196     dout << "Observed : " << zossfp << "+-" << zossfperr << endl;
197     if(mcordata==data) dout << " Composition: " << zossfpee << " (ee), " << zossfpmm << " (mm) " << endl;
198    
199     if(mcordata==mc) dout << " MC :: ";
200     if(mcordata==mcwithsignal) dout << " MC with S :: ";
201     if(mcordata==data) dout << " ";
202     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
203     if(PlottingSetup::RestrictToMassPeak) {
204     dout << "Predicted: " << zossfn << " + (1/3)*(" << zosofp << "-" << zosofn<<") [e&mu]+ (1/3)*(" << sbossfp << "-" << sbossfn<<") [SF,SB]+ (1/3)*(" << sbosofp << "-" << sbosofn<<") [OF,SB] = ";
205     dout << zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn)<< " +/- " << peakerr << " (peak ) " << " +/- " << syserr << " (sys) +/- " << staterr << " (stat)" << endl;
206     if(dopoisson) dout << " stat error with Poisson : +" << poissonstaterrup << " - " << poissonstaterrdown << endl;
207     } else {
208     dout << "Predicted: " << zossfn << " + (" << zosofp << "-" << zosofn<<") [e&mu]= ";
209     dout << zossfn + (zosofp-zosofn) << " +/- " << peakerr << " (peak ) " << " +/- " << syserr << " (sys) +/- " << staterr << " (stat)" << endl;
210     if(dopoisson) dout << " stat error with Poisson : +" << poissonstaterrup << " - " << poissonstaterrdown << endl;
211     }
212    
213     if(mcordata==data) {
214     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
215     if(PlottingSetup::RestrictToMassPeak) {
216     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] = ";
217     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;
218     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] = ";
219     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;
220     } else {
221     dout << " Composition: (ee)" << zossfnee << " + (" << e_to_emu*zosofp << "-" << e_to_emu*zosofn<<") ["<<e_to_emu<<"*e&mu] = ";
222     dout << zossfnee + (e_to_emu*zosofp-e_to_emu*zosofn) << endl;
223     dout << " (mm)" << zossfnmm << " + (" << m_to_emu*zosofp << "-" << m_to_emu*zosofn<<") ["<<m_to_emu<<"*e&mu] = ";
224     dout << zossfnmm + (m_to_emu*zosofp - m_to_emu*zosofn) << endl;
225     }
226     }
227    
228     if(chatty) {
229     dout << " Pred(JZB>0 ) \t " << zossfn << endl;
230     dout << " Pred(e&mu;]) \t " << zosofp << "-" << zosofn << " = " << zosofp-zosofn<<endl;
231     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
232     if(PlottingSetup::RestrictToMassPeak) {
233     dout << " Pred(ossf,sb]) \t " << sbossfp << "-" << sbossfn<<" = "<<sbossfp-sbossfn<<endl;
234     dout << " Pred(osof,sb]) \t " << sbosofp << "-" << sbosofn<<" = "<<sbosofp-sbosofn<<endl;
235     }
236     }
237     }//end of writeanything
238    
239     if(mcordata==data) {
240     //store the result!
241     Nobs.push_back(zossfp);
242     flippedNobs.push_back(zossfn);
243     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
244     if(PlottingSetup::RestrictToMassPeak) {
245     Npred.push_back(zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn));
246     flippedNpred.push_back(zossfp - (1.0/3)*(zosofp-zosofn) - (1.0/3)*(sbossfp-sbossfn) - (1.0/3)*(sbosofp-sbosofn));
247     } else {
248     Npred.push_back(zossfn + (zosofp-zosofn));
249     flippedNpred.push_back(zossfp - (zosofp-zosofn));
250     }
251     float totprederr=0;
252     totprederr+=peakerr*peakerr;
253     totprederr+=syserr*syserr;
254     totprederr+=staterr*staterr;
255     totprederr=TMath::Sqrt(totprederr);
256     Nprederr.push_back(totprederr);
257    
258     float ftotprederr=0;
259     ftotprederr+=fpeakerr*fpeakerr;
260     ftotprederr+=fsyserr*fsyserr;
261     ftotprederr+=fstaterr*fstaterr;
262     ftotprederr=TMath::Sqrt(ftotprederr);
263     flippedNprederr.push_back(ftotprederr);
264    
265     if(doquick<2) {//only for 2 we don't compute this
266     //also save results (for data only!) in the new Results Library class
267     int jzbcutindex=allresults.Find(cut);
268    
269     (allresults.predictions[jzbcutindex]).Zbkg.value=zossfn-(1.0/3)*(zosofn+sbossfn+sbosofn);
270     (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);
271     (allresults.predictions[jzbcutindex]).Zbkg.syserror=TMath::Sqrt((allresults.predictions[jzbcutindex]).Zbkg.syserror);
272     (allresults.predictions[jzbcutindex]).Zbkg.staterror=TMath::Sqrt(zossfn+(1.0/9)*((zosofn)+(sbossfn)+(sbosofn)));
273    
274     if(PlottingSetup::RestrictToMassPeak) {
275     float ofsyserr= ((zosofp)*(zosofp))*(1.0/9)*emuncert*emuncert;//sys err from emu method
276     ofsyserr+= ((sbossfp)*(sbossfp))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
277     ofsyserr+= ((sbosofp)*(sbosofp))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
278    
279     (allresults.predictions[jzbcutindex]).Flavorsym.value=(1.0/3)*(zosofp)+ (1.0/3)*(sbossfp)+ (1.0/3)*(sbosofp);
280     (allresults.predictions[jzbcutindex]).Flavorsym.syserror=TMath::Sqrt(ofsyserr);
281     (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((1.0/9)*(zosofp)+ (1.0/9)*(sbossfp)+ (1.0/9)*(sbosofp));
282     } else {
283     (allresults.predictions[jzbcutindex]).Flavorsym.value=(zosofp);
284     (allresults.predictions[jzbcutindex]).Flavorsym.syserror=(zosofp)*emuncert;
285     (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((zosofp));
286     }
287    
288     (allresults.predictions[jzbcutindex]).total.value=(allresults.predictions[jzbcutindex]).Zbkg.value+(allresults.predictions[jzbcutindex]).Flavorsym.value;
289     (allresults.predictions[jzbcutindex]).total.syserror=syserr;
290     (allresults.predictions[jzbcutindex]).total.staterror=staterr;
291    
292     (allresults.predictions[jzbcutindex]).observed.ee=zossfpee;
293     (allresults.predictions[jzbcutindex]).observed.mm=zossfpmm;
294     (allresults.predictions[jzbcutindex]).observed.eemm=zossfp;
295     }
296     }
297    
298     vector<float> resultvector; // only used for poisson computation in experimental module (therefore ignoring flipped business)
299     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
300     if(PlottingSetup::RestrictToMassPeak) resultvector.push_back(zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn));
301     else resultvector.push_back(zossfn + (zosofp-zosofn));
302     resultvector.push_back(TMath::Sqrt(peakerr*peakerr+syserr*syserr+staterr*staterr));
303     resultvector.push_back(zossfp);
304     resultvector.push_back(zossfperr);
305    
306     return resultvector;
307     }
308    
309     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) {
310     get_result_between_two_fixed_jzb_values(doquick, cut ,15000, mcjzb,datajzb, mcordata,jzbpeakerrorMC, jzbpeakerrorData, rescan, chatty, dopoisson);
311     }
312    
313    
314     void get_result(string mcjzb, string datajzb, float jzbpeakerrordata, float jzbpeakerrormc, vector<float> jzbcuts, bool chatty=false, bool dopoisson=false,int doquick=0) {
315     TCanvas *rescan = new TCanvas("rescan","Result Canvas");
316     for(int icut=0;icut<jzbcuts.size();icut++) {
317     get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,data,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
318     if(doquick==0) {
319     get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,mc,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
320     get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,mcwithsignal,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
321     }
322     }
323     delete rescan;
324     }