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

# Content
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 syserr = (zjetsestimateuncert*zossfn)*(zjetsestimateuncert*zossfn);//first term
155 fsyserr = (zjetsestimateuncert*zossfp)*(zjetsestimateuncert*zossfp);//first term
156 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
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 } else {
166 syserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
167 fsyserr+= ((zosofp)*(zosofp) + (zosofn)*(zosofn))*emuncert*emuncert;//sys err from emu method
168 }
169
170 syserr=TMath::Sqrt(syserr);
171 fsyserr=TMath::Sqrt(fsyserr);
172
173 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 fstaterr=TMath::Sqrt(zossfp + (1.0/9)*(zosofp+zosofn)+ (1.0/9)*(sbossfp+sbossfn)+ (1.0/9)*(sbosofp+sbosofn));
177 } else {
178 staterr=TMath::Sqrt(zossfn + (zosofp+zosofn));
179 fstaterr=TMath::Sqrt(zossfp + (zosofp+zosofn));
180 }
181 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 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
207 if(mcordata==data) {
208 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 }
221
222 if(chatty) {
223 dout << " Pred(JZB>0 ) \t " << zossfn << endl;
224 dout << " Pred(e&mu;]) \t " << zosofp << "-" << zosofn << " = " << zosofp-zosofn<<endl;
225 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 }
231 }//end of writeanything
232
233 if(mcordata==data) {
234 //store the result!
235 Nobs.push_back(zossfp);
236 flippedNobs.push_back(zossfn);
237 flag_this_change(__FUNCTION__,__LINE__,true);//PlottingSetup::RestrictToMassPeak
238 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 flippedNpred.push_back(zossfp - (zosofp-zosofn));
244 }
245 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
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
259 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 (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 if(PlottingSetup::RestrictToMassPeak) {
269 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
273 (allresults.predictions[jzbcutindex]).Flavorsym.value=(1.0/3)*(zosofp)+ (1.0/3)*(sbossfp)+ (1.0/3)*(sbosofp);
274 (allresults.predictions[jzbcutindex]).Flavorsym.syserror=TMath::Sqrt(ofsyserr);
275 (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((1.0/9)*(zosofp)+ (1.0/9)*(sbossfp)+ (1.0/9)*(sbosofp));
276 } else {
277 (allresults.predictions[jzbcutindex]).Flavorsym.value=(zosofp);
278 (allresults.predictions[jzbcutindex]).Flavorsym.syserror=(zosofp)*emuncert;
279 (allresults.predictions[jzbcutindex]).Flavorsym.staterror=TMath::Sqrt((zosofp));
280 }
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 }
290 }
291
292 vector<float> resultvector; // only used for poisson computation in experimental module (therefore ignoring flipped business)
293 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 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 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 }
306
307
308 void get_result(string mcjzb, string datajzb, float jzbpeakerrordata, float jzbpeakerrormc, vector<float> jzbcuts, bool chatty=false, bool dopoisson=false,int doquick=0) {
309 TCanvas *rescan = new TCanvas("rescan","Result Canvas");
310 for(int icut=0;icut<jzbcuts.size();icut++) {
311 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 }
316 }
317 delete rescan;
318 }