ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/cbrown/Development/Plotting/Modules/ResultModule.C
Revision: 1.9
Committed: Thu Jun 13 16:03:54 2013 UTC (11 years, 10 months ago) by buchmann
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +24 -8 lines
Log Message:
Allowing results for three categories: low mass, Z and inclusive

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