ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/ResultModule.C
Revision: 1.4
Committed: Mon Apr 30 08:38:11 2012 UTC (13 years ago) by buchmann
Content type: text/plain
Branch: MAIN
Changes since 1.3: +1 -1 lines
Log Message:
fixed some uint vs int comparisons; commented out/removed unused variables; made Wall happy

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 buchmann 1.3 float zjetsestimateuncert=zjetsestimateuncertONPEAK;
151     float emuncert=emuncertONPEAK;
152     float emsidebanduncert=emsidebanduncertONPEAK;
153     float eemmsidebanduncert=eemmsidebanduncertONPEAK;
154 buchmann 1.2
155     if(!PlottingSetup::RestrictToMassPeak) {
156 buchmann 1.3 zjetsestimateuncert=zjetsestimateuncertOFFPEAK;
157     emuncert=emuncertOFFPEAK;
158     emsidebanduncert=emsidebanduncertOFFPEAK;
159     eemmsidebanduncert=eemmsidebanduncertOFFPEAK;
160     }
161    
162 buchmann 1.1 syserr = (zjetsestimateuncert*zossfn)*(zjetsestimateuncert*zossfn);//first term
163     fsyserr = (zjetsestimateuncert*zossfp)*(zjetsestimateuncert*zossfp);//first term
164     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
165     if(PlottingSetup::RestrictToMassPeak) {
166     syserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*(1.0/9)*emuncert*emuncert;//sys err from emu method
167     syserr+= ((sbossfp)*(sbossfp)+(sbossfn)*(sbossfn))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
168     syserr+= ((sbosofp)*(sbosofp)+(sbosofn)*(sbosofn))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
169    
170     fsyserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*(1.0/9)*emuncert*emuncert;//sys err from emu method
171     fsyserr+= ((sbossfp)*(sbossfp)+(sbossfn)*(sbossfn))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
172     fsyserr+= ((sbosofp)*(sbosofp)+(sbosofn)*(sbosofn))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
173     } else {
174     syserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
175     fsyserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
176     }
177    
178     syserr=TMath::Sqrt(syserr);
179     fsyserr=TMath::Sqrt(fsyserr);
180    
181     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
182     if(PlottingSetup::RestrictToMassPeak) {
183     staterr=TMath::Sqrt(zossfn + (1.0/9)*(zosofp+zosofn)+ (1.0/9)*(sbossfp+sbossfn)+ (1.0/9)*(sbosofp+sbosofn));
184     fstaterr=TMath::Sqrt(zossfp + (1.0/9)*(zosofp+zosofn)+ (1.0/9)*(sbossfp+sbossfn)+ (1.0/9)*(sbosofp+sbosofn));
185     } else {
186     staterr=TMath::Sqrt(zossfn + (zosofp+zosofn));
187     fstaterr=TMath::Sqrt(zossfp + (zosofp+zosofn));
188     }
189     if(dopoisson) advanced_poisson(zossfn,zosofp,zosofn,sbossfp,sbossfn,sbosofp,sbosofn,poissonstaterrdown,poissonstaterrup);
190    
191     float e_to_emu=0.5;
192     float m_to_emu=0.5;
193    
194     if(writeanything) {
195     if(mcordata==mc) dout << " MC :: ";
196     if(mcordata==mcwithsignal) dout << " MC with S :: ";
197     if(mcordata==data) dout << " ";
198     dout << "Observed : " << zossfp << "+-" << zossfperr << endl;
199     if(mcordata==data) dout << " Composition: " << zossfpee << " (ee), " << zossfpmm << " (mm) " << endl;
200    
201     if(mcordata==mc) dout << " MC :: ";
202     if(mcordata==mcwithsignal) dout << " MC with S :: ";
203     if(mcordata==data) dout << " ";
204     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
205     if(PlottingSetup::RestrictToMassPeak) {
206     dout << "Predicted: " << zossfn << " + (1/3)*(" << zosofp << "-" << zosofn<<") [e&mu]+ (1/3)*(" << sbossfp << "-" << sbossfn<<") [SF,SB]+ (1/3)*(" << sbosofp << "-" << sbosofn<<") [OF,SB] = ";
207     dout << zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn)<< " +/- " << peakerr << " (peak ) " << " +/- " << syserr << " (sys) +/- " << staterr << " (stat)" << endl;
208     if(dopoisson) dout << " stat error with Poisson : +" << poissonstaterrup << " - " << poissonstaterrdown << endl;
209     } else {
210     dout << "Predicted: " << zossfn << " + (" << zosofp << "-" << zosofn<<") [e&mu]= ";
211     dout << zossfn + (zosofp-zosofn) << " +/- " << peakerr << " (peak ) " << " +/- " << syserr << " (sys) +/- " << staterr << " (stat)" << endl;
212     if(dopoisson) dout << " stat error with Poisson : +" << poissonstaterrup << " - " << poissonstaterrdown << endl;
213     }
214    
215     if(mcordata==data) {
216     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
217     if(PlottingSetup::RestrictToMassPeak) {
218     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] = ";
219     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;
220     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] = ";
221     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;
222     } else {
223     dout << " Composition: (ee)" << zossfnee << " + (" << e_to_emu*zosofp << "-" << e_to_emu*zosofn<<") ["<<e_to_emu<<"*e&mu] = ";
224     dout << zossfnee + (e_to_emu*zosofp-e_to_emu*zosofn) << endl;
225     dout << " (mm)" << zossfnmm << " + (" << m_to_emu*zosofp << "-" << m_to_emu*zosofn<<") ["<<m_to_emu<<"*e&mu] = ";
226     dout << zossfnmm + (m_to_emu*zosofp - m_to_emu*zosofn) << endl;
227     }
228     }
229    
230     if(chatty) {
231     dout << " Pred(JZB>0 ) \t " << zossfn << endl;
232     dout << " Pred(e&mu;]) \t " << zosofp << "-" << zosofn << " = " << zosofp-zosofn<<endl;
233     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
234     if(PlottingSetup::RestrictToMassPeak) {
235     dout << " Pred(ossf,sb]) \t " << sbossfp << "-" << sbossfn<<" = "<<sbossfp-sbossfn<<endl;
236     dout << " Pred(osof,sb]) \t " << sbosofp << "-" << sbosofn<<" = "<<sbosofp-sbosofn<<endl;
237     }
238     }
239     }//end of writeanything
240    
241     if(mcordata==data) {
242     //store the result!
243     Nobs.push_back(zossfp);
244     flippedNobs.push_back(zossfn);
245     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
246     if(PlottingSetup::RestrictToMassPeak) {
247     Npred.push_back(zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn));
248     flippedNpred.push_back(zossfp - (1.0/3)*(zosofp-zosofn) - (1.0/3)*(sbossfp-sbossfn) - (1.0/3)*(sbosofp-sbosofn));
249     } else {
250     Npred.push_back(zossfn + (zosofp-zosofn));
251     flippedNpred.push_back(zossfp - (zosofp-zosofn));
252     }
253     float totprederr=0;
254     totprederr+=peakerr*peakerr;
255     totprederr+=syserr*syserr;
256     totprederr+=staterr*staterr;
257     totprederr=TMath::Sqrt(totprederr);
258     Nprederr.push_back(totprederr);
259    
260     float ftotprederr=0;
261     ftotprederr+=fpeakerr*fpeakerr;
262     ftotprederr+=fsyserr*fsyserr;
263     ftotprederr+=fstaterr*fstaterr;
264     ftotprederr=TMath::Sqrt(ftotprederr);
265     flippedNprederr.push_back(ftotprederr);
266    
267     if(doquick<2) {//only for 2 we don't compute this
268     //also save results (for data only!) in the new Results Library class
269     int jzbcutindex=allresults.Find(cut);
270    
271     (allresults.predictions[jzbcutindex]).Zbkg.value=zossfn-(1.0/3)*(zosofn+sbossfn+sbosofn);
272     (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);
273     (allresults.predictions[jzbcutindex]).Zbkg.syserror=TMath::Sqrt((allresults.predictions[jzbcutindex]).Zbkg.syserror);
274     (allresults.predictions[jzbcutindex]).Zbkg.staterror=TMath::Sqrt(zossfn+(1.0/9)*((zosofn)+(sbossfn)+(sbosofn)));
275    
276     if(PlottingSetup::RestrictToMassPeak) {
277     float ofsyserr= ((zosofp)*(zosofp))*(1.0/9)*emuncert*emuncert;//sys err from emu method
278     ofsyserr+= ((sbossfp)*(sbossfp))*(1.0/9)*eemmsidebanduncert*eemmsidebanduncert; // sys err from eemm sidebands
279     ofsyserr+= ((sbosofp)*(sbosofp))*(1.0/9)*emsidebanduncert*emsidebanduncert; // sys err from emu sidebands
280    
281     (allresults.predictions[jzbcutindex]).Flavorsym.value=(1.0/3)*(zosofp)+ (1.0/3)*(sbossfp)+ (1.0/3)*(sbosofp);
282     (allresults.predictions[jzbcutindex]).Flavorsym.syserror=TMath::Sqrt(ofsyserr);
283     (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((1.0/9)*(zosofp)+ (1.0/9)*(sbossfp)+ (1.0/9)*(sbosofp));
284     } else {
285     (allresults.predictions[jzbcutindex]).Flavorsym.value=(zosofp);
286     (allresults.predictions[jzbcutindex]).Flavorsym.syserror=(zosofp)*emuncert;
287     (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((zosofp));
288     }
289    
290     (allresults.predictions[jzbcutindex]).total.value=(allresults.predictions[jzbcutindex]).Zbkg.value+(allresults.predictions[jzbcutindex]).Flavorsym.value;
291     (allresults.predictions[jzbcutindex]).total.syserror=syserr;
292     (allresults.predictions[jzbcutindex]).total.staterror=staterr;
293    
294     (allresults.predictions[jzbcutindex]).observed.ee=zossfpee;
295     (allresults.predictions[jzbcutindex]).observed.mm=zossfpmm;
296     (allresults.predictions[jzbcutindex]).observed.eemm=zossfp;
297     }
298     }
299    
300     vector<float> resultvector; // only used for poisson computation in experimental module (therefore ignoring flipped business)
301     flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
302     if(PlottingSetup::RestrictToMassPeak) resultvector.push_back(zossfn + (1.0/3)*(zosofp-zosofn)+ (1.0/3)*(sbossfp-sbossfn)+ (1.0/3)*(sbosofp-sbosofn));
303     else resultvector.push_back(zossfn + (zosofp-zosofn));
304     resultvector.push_back(TMath::Sqrt(peakerr*peakerr+syserr*syserr+staterr*staterr));
305     resultvector.push_back(zossfp);
306     resultvector.push_back(zossfperr);
307    
308     return resultvector;
309     }
310    
311     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) {
312     get_result_between_two_fixed_jzb_values(doquick, cut ,15000, mcjzb,datajzb, mcordata,jzbpeakerrorMC, jzbpeakerrorData, rescan, chatty, dopoisson);
313     }
314    
315    
316     void get_result(string mcjzb, string datajzb, float jzbpeakerrordata, float jzbpeakerrormc, vector<float> jzbcuts, bool chatty=false, bool dopoisson=false,int doquick=0) {
317     TCanvas *rescan = new TCanvas("rescan","Result Canvas");
318 buchmann 1.4 for(int icut=0;icut<(int)jzbcuts.size();icut++) {
319 buchmann 1.1 get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,data,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
320     if(doquick==0) {
321     get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,mc,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
322     get_result_above_one_fixed_jzb_value(doquick,jzbcuts[icut],mcjzb,datajzb,mcwithsignal,jzbpeakerrormc,jzbpeakerrordata,rescan,chatty,dopoisson);
323     }
324     }
325     delete rescan;
326     }