ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/UfCode/UserArea/StatTools/limitOptimization.C
Revision: 1.1
Committed: Tue Feb 15 14:03:43 2011 UTC (14 years, 2 months ago) by kkotov
Content type: text/plain
Branch: MAIN
CVS Tags: V2012-H-02, V2012-01-00, V2011-01-01, V2011-01-00, AnnaDimuon, V01-00-01, V01-00-00, HEAD
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "../cl95cms/cl95cms.C"
2 #include "cuts.C"
3 #include "TFile.h"
4 #include "TH1.h"
5 #include "TCanvas.h"
6 #include "TGraphErrors.h"
7 #include <map>
8 #include <iomanip>
9 #include <utility>
10
11 #define PRODUCT(a,b,ea,eb) a*b,sqrt(ea*b*ea*b+a*eb*a*eb)
12 //const double lumi = 34.18, lumiErr = 0.052;
13 const double lumi = 34.74, lumiErr = 0.11;
14
15 const double bgExpect[7] = {20., 7.3, 3.0, 1.3, 0.57, 0.26, 0.11};
16 const double bgUncert[7] = {10.1, 5.2, 2.6, 1.25, 0.58, 0.26, 0.12};
17 const int bgReal [7] = {16, 9, 5, 1, 1, 1, 1};
18
19 // Old backgrounds:
20 //const double bgExpect[7] = {29., 12.0, 5.3, 2.4, 1.2, 0.54, 0.24};
21 //const double bgUncert[7] = {9., 4.7, 2.7, 1.4, 0.7, 0.40, 0.18};
22
23 using namespace std;
24
25 map<string, map<int, pair<double,double> > > gpCuts;
26
27 double lim(double eff, double effErr, double _bgExpect, double _bgExpectErr, int bg){
28 double actualLimitSigma = CL95(lumi, lumi*lumiErr, eff, effErr, _bgExpect, _bgExpectErr, bg);
29 cout<<"Actual limit on sigma="<<actualLimitSigma<<" (pb)"<<endl;
30 return actualLimitSigma;
31 }
32
33 double run(double eff, double effErr, double _bgExpect, double _bgExpectErr){
34 double expectedLimitSigma = CLA (lumi, lumi*lumiErr, eff, effErr, _bgExpect, _bgExpectErr);
35 cout<<"Expected limit on sigma="<<expectedLimitSigma<<" (pb)"<<endl;
36 return expectedLimitSigma;
37 }
38
39 void calcEff(const char *signalNtupleName=0){
40 if( !signalNtupleName ){
41 cout<<"calcEff: give me ntuple"<<endl;
42 return;
43 }
44
45 cout<<"Sample: "<<signalNtupleName<<endl;
46
47 double limits[7];
48
49 // Run the threshold
50 for(int threshold=200,thrNumber=0; threshold<550; threshold+=50,thrNumber++){
51 cout<<"Calculating limit for the threshold "<<threshold<<endl;
52 cout<<"Expect "<<bgExpect[thrNumber]<<" +- "<<bgUncert[thrNumber]<<" events of background"<<endl;
53
54 double eff = gpCuts[signalNtupleName][threshold].first; // qT threshold efficiency
55 double effErr = gpCuts[signalNtupleName][threshold].second; // and the absolute statistical uncertainty
56
57 // double eff = cuts(signalNtupleName,threshold); // qT threshold efficiency
58 // double effErr = cuts_error; // and the absolute statistical uncertainty
59 cout<<"Using eff="<<eff<<" and effErr="<<effErr<<endl;
60 limits[thrNumber] = run(eff,effErr,bgExpect[thrNumber],bgUncert[thrNumber]);
61 cout<<endl<<endl;
62 }
63
64 int min=0;
65 double minLimit=100;
66 for(int thrNumber=0; thrNumber<7; thrNumber++)
67 if( limits[thrNumber]<minLimit ){
68 minLimit = limits[thrNumber];
69 min = thrNumber;
70 }
71
72 cout<<"For "<<signalNtupleName<<" the best limit is "<<minLimit<<" is at pT threshold: "<<(200+min*50)<<endl;
73 }
74
75 void limitOptimization(void){
76 map<int,pair<double,double> > CI05;
77 /* Old eff:
78 CI05[200] = pair<double,double>(0.59976*0.5364,0.0076); //2501/4170
79 CI05[250] = pair<double,double>(0.59424*0.4351,0.0083); //2084/3507
80 CI05[300] = pair<double,double>(0.58871*0.3466,0.0092); //1689/2869
81 CI05[350] = pair<double,double>(0.56217*0.2796,0.0113); //1076/1914
82 CI05[400] = pair<double,double>(0.53359*0.2215,0.0127); // 826/1548
83 CI05[450] = pair<double,double>(0.53359*0.1724,0.0127); // 826/1548
84 CI05[500] = pair<double,double>(0.50552*0.1315,0.0140); // 641/1268
85 */
86 CI05[200] = pair<double,double>(PRODUCT(0.747,0.496,0.008,0.007));
87 CI05[250] = pair<double,double>(PRODUCT(0.740,0.409,0.008,0.007));
88 CI05[300] = pair<double,double>(PRODUCT(0.730,0.331,0.009,0.007));
89 CI05[350] = pair<double,double>(PRODUCT(0.737,0.269,0.010,0.006));
90 CI05[400] = pair<double,double>(PRODUCT(0.717,0.213,0.012,0.006));
91 CI05[450] = pair<double,double>(PRODUCT(0.690,0.165,0.013,0.005));
92 CI05[500] = pair<double,double>(PRODUCT(0.649,0.125,0.015,0.005));
93 gpCuts["../cl95cms/tuples/old/tup_ci_M05.root"] = CI05;
94
95 // calcEff("../cl95cms/tuples/old/tup_ci_M05.root");
96
97 cout<<"Expect CI05 limit "<<run(CI05[350].first,CI05[350].second,bgExpect[3],bgUncert[3])<<endl;
98 cout<<"Actual CI05 limit "<<lim(CI05[350].first,CI05[350].second,bgExpect[3],bgUncert[3],bgReal[3])<<endl;
99 // cout<<" (old CI05 limit "<<lim(0.204147,0.007,bgExpect[2],bgUncert[2],bgReal[2])<<")"<<endl;
100 // cout<<" (old CI10 limit "<<lim(0.204147,0.007,3,2.6,5)<<")"<<endl;
101
102 map<int,pair<double,double> > CI10;
103 /* Old eff:
104 CI10[200] = pair<double,double>(0.567604*0.702642,0.00647); //3329/5865
105 CI10[250] = pair<double,double>(0.573392*0.633208,0.00670); //3129/5457
106 CI10[300] = pair<double,double>(0.575979*0.556075,0.00704); //2839/4929
107 CI10[350] = pair<double,double>(0.582302*0.478943,0.00747); //2540/4362
108 CI10[400] = pair<double,double>(0.574853*0.398943,0.00807); //2158/3754
109 CI10[450] = pair<double,double>(0.561973*0.330113,0.00877); //1800/3203
110 CI10[500] = pair<double,double>(0.542021*0.263245,0.00959); //1464/2701
111 */
112 CI10[200] = pair<double,double>(PRODUCT(0.734,0.664,0.007,0.007));
113 CI10[250] = pair<double,double>(PRODUCT(0.737,0.621,0.007,0.007));
114 CI10[300] = pair<double,double>(PRODUCT(0.735,0.562,0.007,0.007));
115 CI10[350] = pair<double,double>(PRODUCT(0.726,0.495,0.008,0.007));
116 CI10[400] = pair<double,double>(PRODUCT(0.712,0.419,0.008,0.007));
117 CI10[450] = pair<double,double>(PRODUCT(0.700,0.350,0.009,0.007));
118 CI10[500] = pair<double,double>(PRODUCT(0.664,0.280,0.010,0.006));
119 gpCuts["../cl95cms/tuples/old/tup_ci_M10.root"] = CI10;
120
121 // calcEff("../cl95cms/tuples/old/tup_ci_M10.root");
122 cout<<"Expect CI10 limit "<<run(CI10[400].first,CI10[400].second,bgExpect[4],bgUncert[4])<<endl;
123 cout<<"Actual CI10 limit "<<lim(CI10[400].first,CI10[400].second,bgExpect[4],bgUncert[4],bgReal[4])<<endl;
124
125 map<int,pair<double,double> > CI15;
126 /*
127 CI15[200] = pair<double,double>(0.512116*0.71772,0.0064); //3149/6149
128 CI15[250] = pair<double,double>(0.512016*0.68105,0.0065); //3068/5992
129 CI15[300] = pair<double,double>(0.514795*0.64022,0.0066); //2975/5779
130 CI15[350] = pair<double,double>(0.513435*0.59322,0.0067); //2828/5508
131 CI15[400] = pair<double,double>(0.511898*0.54499,0.0069); //2689/5253
132 CI15[450] = pair<double,double>(0.508294*0.48413,0.0072); //2482/4883
133 CI15[500] = pair<double,double>(0.497284*0.424961,0.0075); //2197/4418
134 */
135 CI15[200] = pair<double,double>(PRODUCT(0.668,0.640,0.007,0.007));
136 CI15[250] = pair<double,double>(PRODUCT(0.668,0.623,0.007,0.007));
137 CI15[300] = pair<double,double>(PRODUCT(0.668,0.604,0.007,0.007));
138 CI15[350] = pair<double,double>(PRODUCT(0.663,0.573,0.007,0.007));
139 CI15[400] = pair<double,double>(PRODUCT(0.651,0.538,0.007,0.007));
140 CI15[450] = pair<double,double>(PRODUCT(0.634,0.490,0.008,0.007));
141 CI15[500] = pair<double,double>(PRODUCT(0.627,0.439,0.008,0.007));
142
143 gpCuts["../cl95cms/tuples/old/tup_ci_M15.root"] = CI15;
144
145 // calcEff("../cl95cms/tuples/old/tup_ci_M15.root");
146 cout<<"Expect CI15 limit "<<run(CI15[400].first,CI15[400].second,bgExpect[4],bgUncert[4])<<endl;
147 cout<<"Actual CI15 limit "<<lim(CI15[400].first,CI15[400].second,bgExpect[4],bgUncert[4],bgReal[4])<<endl;
148
149 map<int,pair<double,double> > CI20;
150 /*
151 CI20[200] = pair<double,double>(0.4452*0.699049,0.0062); //2880/6469
152 CI20[250] = pair<double,double>(0.4467*0.670083,0.0062); //2843/6365
153 CI20[300] = pair<double,double>(0.4463*0.642602,0.0063); //2798/6270
154 CI20[350] = pair<double,double>(0.4448*0.614825,0.0063); //2730/6137
155 CI20[400] = pair<double,double>(0.4434*0.581699,0.0064); //2667/6015
156 CI20[450] = pair<double,double>(0.4381*0.548425,0.0065); //2551/5823
157 CI20[500] = pair<double,double>(0.4335*0.511586,0.0066); //2436/5620
158 */
159 CI20[200] = pair<double,double>(PRODUCT(0.592,0.576,0.007,0.007));
160 CI20[250] = pair<double,double>(PRODUCT(0.593,0.568,0.007,0.007));
161 CI20[300] = pair<double,double>(PRODUCT(0.592,0.558,0.007,0.007));
162 CI20[350] = pair<double,double>(PRODUCT(0.588,0.544,0.007,0.007));
163 CI20[400] = pair<double,double>(PRODUCT(0.583,0.529,0.007,0.007));
164 CI20[450] = pair<double,double>(PRODUCT(0.575,0.506,0.007,0.007));
165 CI20[500] = pair<double,double>(PRODUCT(0.567,0.482,0.008,0.007));
166
167 gpCuts["../cl95cms/tuples/old/tup_ci_M20.root"] = CI20;
168
169 // calcEff("../cl95cms/tuples/old/tup_ci_M20.root");
170 cout<<"Expect CI20 limit "<<run(CI20[400].first,CI20[400].second,bgExpect[4],bgUncert[4])<<endl;
171 cout<<"Actual CI20 limit "<<lim(CI20[400].first,CI20[400].second,bgExpect[4],bgUncert[4],bgReal[4])<<endl;
172
173 map<int,pair<double,double> > GI05;
174 /*
175 GI05[200] = pair<double,double>(0.7042*0.434767,0.0086); //1995/2833
176 GI05[250] = pair<double,double>(0.6761*0.128997,0.0167); // 528/781
177 GI05[300] = pair<double,double>(0.6613*0.046490,0.0269); // 205/310
178 GI05[350] = pair<double,double>(0.6609*0.024807,0.0359); // 115/174
179 GI05[400] = pair<double,double>(0.7079*0.014149,0.0482); // 63/89
180 GI05[450] = pair<double,double>(0.775*0.0088203, 0.066); // 31/40
181 GI05[500] = pair<double,double>(0.7391*0.004778,0.0916); // 17/23
182 */
183 GI05[200] = pair<double,double>(PRODUCT(0.735,0.3852,0.009,0.007));
184 GI05[250] = pair<double,double>(PRODUCT(0.803,0.1102,0.015,0.004));
185 GI05[300] = pair<double,double>(PRODUCT(0.785,0.0402,0.026,0.003));
186 GI05[350] = pair<double,double>(PRODUCT(0.784,0.0218,0.035,0.002));
187 GI05[400] = pair<double,double>(PRODUCT(0.822,0.0120,0.045,0.002));
188 GI05[450] = pair<double,double>(PRODUCT(0.973,0.0072,0.027,0.001));
189 GI05[500] = pair<double,double>(PRODUCT(0.818,0.0036,0.082,0.001));
190
191 gpCuts["../cl95cms/tuples/old/tup_qgf_M05.root"] = GI05;
192
193 // calcEff("../cl95cms/tuples/old/tup_qgf_M05.root");
194 cout<<"Expect GI05 limit "<<run(GI05[200].first,GI05[200].second,bgExpect[0],bgUncert[0])<<endl;
195 // cout<<" (old GI05 limit "<<run(.306075968,0.009,bgExpect[0],bgUncert[0])<<")"<<endl;
196 cout<<"Actual GI05 limit "<<lim(GI05[200].first,GI05[200].second,bgExpect[0],bgUncert[0],bgReal[0])<<endl;
197 // cout<<" (old GI05 limit "<<lim(.306075968,0.009,bgExpect[0],bgUncert[0],bgReal[0])<<")"<<endl;
198
199 map<int,pair<double,double> > GI10;
200 /*
201 GI10[200] = pair<double,double>(0.696193*0.792589,0.0063); //3694/5306
202 GI10[250] = pair<double,double>(0.698324*0.729971,0.0065); //3500/5012
203 GI10[300] = pair<double,double>(0.70368 *0.654486,0.0067); //3232/4593
204 GI10[350] = pair<double,double>(0.701044*0.552582,0.0072); //2821/4024
205 GI10[400] = pair<double,double>(0.703646*0.429233,0.0080); //2277/3236
206 GI10[450] = pair<double,double>(0.698768*0.277063,0.0098); //1531/2191
207 GI10[500] = pair<double,double>(0.664491*0.122319,0.0171); // 509/766
208 */
209 GI10[200] = pair<double,double>(PRODUCT(0.803,0.735,0.006,0.006));
210 GI10[250] = pair<double,double>(PRODUCT(0.807,0.695,0.006,0.007));
211 GI10[300] = pair<double,double>(PRODUCT(0.808,0.637,0.006,0.007));
212 GI10[350] = pair<double,double>(PRODUCT(0.799,0.548,0.007,0.007));
213 GI10[400] = pair<double,double>(PRODUCT(0.781,0.433,0.008,0.007));
214 GI10[450] = pair<double,double>(PRODUCT(0.749,0.280,0.010,0.006));
215 GI10[500] = pair<double,double>(PRODUCT(0.956,0.122,0.008,0.005));
216
217 gpCuts["../cl95cms/tuples/old/tup_qgf_M10.root"] = GI10;
218
219 // calcEff("../cl95cms/tuples/old/tup_qgf_M10.root");
220 cout<<"Expect GI10 limit "<<run(GI10[350].first,GI10[350].second,bgExpect[3],bgUncert[3])<<endl;
221 cout<<"Actual GI10 limit "<<lim(GI10[350].first,GI10[350].second,bgExpect[3],bgUncert[3],bgReal[3])<<endl;
222
223 map<int,pair<double,double> > GI15;
224 /*
225 GI15[200] = pair<double,double>(0.70088*0.768832,0.0067); //3264/4657
226 GI15[250] = pair<double,double>(0.70383*0.729915,0.0072); //2809/3991
227 GI15[300] = pair<double,double>(0.71012*0.69534, 0.0083); //2141/3015
228 GI15[350] = pair<double,double>(0.72122*0.654585,0.0112); //1159/1607
229 GI15[400] = pair<double,double>(0.72072*0.607149,0.0213); // 320/444
230 GI15[450] = pair<double,double>(0.68692*0.556539,0.0317); // 147/214
231 GI15[500] = pair<double,double>(0.64394*0.490062,0.0417); // 85/132
232 */
233 GI15[200] = pair<double,double>(PRODUCT(0.774,0.690,0.006,0.007));
234 GI15[250] = pair<double,double>(PRODUCT(0.770,0.669,0.007,0.007));
235 GI15[300] = pair<double,double>(PRODUCT(0.759,0.649,0.008,0.007));
236 GI15[350] = pair<double,double>(PRODUCT(0.763,0.619,0.011,0.007));
237 GI15[400] = pair<double,double>(PRODUCT(0.956,0.585,0.010,0.007));
238 GI15[450] = pair<double,double>(PRODUCT(0.918,0.547,0.020,0.007));
239 GI15[500] = pair<double,double>(PRODUCT(0.847,0.485,0.034,0.007));
240
241 gpCuts["../cl95cms/tuples/old/tup_qgf_M15.root"] = GI15;
242
243 // calcEff("../cl95cms/tuples/old/tup_qgf_M15.root");
244 cout<<"Expect GI15 limit "<<run(GI15[400].first,GI15[400].second,bgExpect[4],bgUncert[4])<<endl;
245 cout<<"Actual GI15 limit "<<lim(GI15[400].first,GI15[400].second,bgExpect[4],bgUncert[4],bgReal[4])<<endl;
246
247 // for(map<int,pair<double,double> >::const_iterator iter=GI15.begin();
248 // iter!=GI15.end(); iter++) //cout<<"pT>"<<iter->first<<" "<<iter->second.first<<" +- "<<iter->second.second<<endl;
249 //cout<<setw(4)<<iter->second.first*100<<"$\\pm$"<<setw(3)<<iter->second.second*100<<"\\%"<<endl;
250 }