1 | { |
---|
2 | gROOT->SetStyle("Plain"); |
---|
3 | TString filename = ""; |
---|
4 | TString type[2] = {"Signal","ttbar"}; |
---|
5 | TFile *file[2]; |
---|
6 | TTree *t[2]; |
---|
7 | double WeiSig = 0.685*1.43*1000/74873; |
---|
8 | double WeiTBkg = 0.5558*164.6*1000/199869; |
---|
9 | double Wei[2] = {WeiSig,WeiTBkg}; |
---|
10 | |
---|
11 | FILE *fRes3 = fopen("CatEfficiency_WithoutMinLep.txt","w+"); |
---|
12 | |
---|
13 | for (int i = 0; i < 2; i++){ |
---|
14 | filename = "res_medium2ndEl_NewMinLep1_"; filename += type[i]; filename += ".root"; |
---|
15 | file[i] = TFile::Open(filename); |
---|
16 | t[i] = (TTree*)file[i]->Get("T"); |
---|
17 | //t[i]->SetWeight(Wei[i],"global"); |
---|
18 | } |
---|
19 | |
---|
20 | //######### OPTIMIZE THE CUTS ########## |
---|
21 | double cos1V[11]; |
---|
22 | double cos2V[11]; |
---|
23 | double dMinV[1]; |
---|
24 | double C1Best = -1e3; |
---|
25 | double C2Best = -1e3; |
---|
26 | double C3Best = -1e3; |
---|
27 | double Rmax = -1e30; |
---|
28 | double nSig = -1e3; |
---|
29 | double nBkg = -1e3; |
---|
30 | |
---|
31 | int iTot[2]; |
---|
32 | for (int i = 0; i < 2; i++){ |
---|
33 | iTot[i] = 0; |
---|
34 | } |
---|
35 | |
---|
36 | int i1Sig[121]; |
---|
37 | int i2Sig[121]; |
---|
38 | int i3Sig[121]; |
---|
39 | int i4Sig[121]; |
---|
40 | int i5Sig[121]; |
---|
41 | int i6Sig[121]; |
---|
42 | |
---|
43 | int i1Bkg[121]; |
---|
44 | int i2Bkg[121]; |
---|
45 | int i3Bkg[121]; |
---|
46 | int i4Bkg[121]; |
---|
47 | int i5Bkg[121]; |
---|
48 | int i6Bkg[121]; |
---|
49 | |
---|
50 | for (int i = 0; i < 121; i++){ |
---|
51 | i1Sig[i]=0; |
---|
52 | i2Sig[i]=0; |
---|
53 | i3Sig[i]=0; |
---|
54 | i4Sig[i]=0; |
---|
55 | i5Sig[i]=0; |
---|
56 | i6Sig[i]=0; |
---|
57 | |
---|
58 | i1Bkg[i]=0; |
---|
59 | i2Bkg[i]=0; |
---|
60 | i3Bkg[i]=0; |
---|
61 | i4Bkg[i]=0; |
---|
62 | i5Bkg[i]=0; |
---|
63 | i6Bkg[i]=0; |
---|
64 | } |
---|
65 | |
---|
66 | //Make the set of values for cos1 and cos2 |
---|
67 | for (int i = 0; i < 11; i++){ |
---|
68 | cos1V[i] = i*0.1; |
---|
69 | cos2V[i] = i*0.1; |
---|
70 | } |
---|
71 | |
---|
72 | //Make the set of values for MinLep1 |
---|
73 | for (int i = 0; i < 1; i++){ |
---|
74 | dMinV[i] = i + 47; |
---|
75 | } |
---|
76 | |
---|
77 | |
---|
78 | TProfile *h_sigma = new TProfile("sigma", "", 121, 0, 121, 0, 10); |
---|
79 | TH2F *h_sigma2D = new TH2F("sigma2D", "", 11, 0, 1, 11, 0, 1); |
---|
80 | |
---|
81 | for (int i = 0; i < 2; i++){ |
---|
82 | int nevt = t[i]->GetEntries(); |
---|
83 | for (int iev = 0; iev < nevt; iev++) { |
---|
84 | t[i]->GetEntry(iev); |
---|
85 | |
---|
86 | double mt = t[i]->GetLeaf("mtophad")->GetValue(); |
---|
87 | double HT = t[i]->GetLeaf("HT")->GetValue(); |
---|
88 | if (mt > 300 && HT > 600){ |
---|
89 | iTot[i]++; |
---|
90 | } |
---|
91 | } |
---|
92 | } |
---|
93 | |
---|
94 | for (int i = 0; i < 2; i++){ |
---|
95 | int nevt = t[i]->GetEntries(); |
---|
96 | |
---|
97 | int icount = 0; |
---|
98 | for (int iC1 = 0; iC1 < 11; iC1++){ |
---|
99 | double Cut1 = cos1V[iC1]; |
---|
100 | for (int iC2 = 0; iC2 < 11; iC2++){ |
---|
101 | double Cut2 = cos2V[iC2]; |
---|
102 | int k0 = 11*iC1 + iC2; |
---|
103 | for (int iC3 = 0; iC3 < 1; iC3++){ |
---|
104 | double Cut3 = dMinV[iC3]; |
---|
105 | icount++; |
---|
106 | |
---|
107 | int k = 1*k0 + iC3; |
---|
108 | |
---|
109 | cout << "file " << i << endl; |
---|
110 | cout << "iC1 = " << iC1 << " iC2 = " << iC2 << " iC3 = " << iC3 << endl; |
---|
111 | cout << "k = " << k << endl; |
---|
112 | cout << "icount = " << icount << endl; |
---|
113 | cout << "Cut1 = " << Cut1 << endl; |
---|
114 | cout << "Cut2 = " << Cut2 << endl; |
---|
115 | cout << "Cut3 = " << Cut3 << endl << endl; |
---|
116 | |
---|
117 | for (int iev = 0; iev < nevt; iev++) { |
---|
118 | t[i]->GetEntry(iev); |
---|
119 | |
---|
120 | double mt = t[i]->GetLeaf("mtophad")->GetValue(); |
---|
121 | double HT = t[i]->GetLeaf("HT")->GetValue(); |
---|
122 | double x = t[i]->GetLeaf("cos_tlepCMtpair")->GetValue(); |
---|
123 | double y = t[i]->GetLeaf("cosWqq")->GetValue(); |
---|
124 | double MinLep1 = t[i]->GetLeaf("MinLep1")->GetValue(); |
---|
125 | |
---|
126 | double cos1 = fabs(x); |
---|
127 | double cos2 = fabs(y); |
---|
128 | |
---|
129 | //For cat cos + cat MinLep < Cut3 |
---|
130 | if (mt > 300 && HT > 600){ |
---|
131 | if (cos1 < Cut1 && cos2 < Cut2 && HT < 800){ |
---|
132 | if (i==0) i1Sig[k]++; |
---|
133 | if (i==1) i1Bkg[k]++; |
---|
134 | } |
---|
135 | |
---|
136 | if (cos1 > Cut1 && cos2 > Cut2 && HT < 800){ |
---|
137 | if (i==0) i2Sig[k]++; |
---|
138 | if (i==1) i2Bkg[k]++; |
---|
139 | } |
---|
140 | |
---|
141 | if ((cos1 < Cut1 && cos2 > Cut2 && HT < 800) || (cos1 > Cut1 && cos2 < Cut2 && HT < 800)){ |
---|
142 | if (i==0) i3Sig[k]++; |
---|
143 | if (i==1) i3Bkg[k]++; |
---|
144 | } |
---|
145 | |
---|
146 | if (cos1 < Cut1 && cos2 < Cut2 && HT > 800){ |
---|
147 | if (i==0) i4Sig[k]++; |
---|
148 | if (i==1) i4Bkg[k]++; |
---|
149 | } |
---|
150 | |
---|
151 | if (cos1 > Cut1 && cos2 > Cut2 && HT > 800){ |
---|
152 | if (i==0) i5Sig[k]++; |
---|
153 | if (i==1) i5Bkg[k]++; |
---|
154 | } |
---|
155 | |
---|
156 | if ((cos1 < Cut1 && cos2 > Cut2 && HT > 800) || (cos1 > Cut1 && cos2 < Cut2 && HT > 800)){ |
---|
157 | if (i==0) i6Sig[k]++; |
---|
158 | if (i==1) i6Bkg[k]++; |
---|
159 | } |
---|
160 | } |
---|
161 | }//Read each file |
---|
162 | }//End of loop on iC3 |
---|
163 | }//End of loop on iC2 |
---|
164 | }//End of loop on iC1 |
---|
165 | }//End of reading 2 files |
---|
166 | |
---|
167 | //Now the table contains number of events for different categories is filled |
---|
168 | double N1_bar = iTot[0]*Wei[0]; |
---|
169 | double N0_bar = iTot[1]*Wei[1]; |
---|
170 | |
---|
171 | cout << "N1_bar = " << N1_bar << endl; |
---|
172 | cout << "N0_bar = " << N0_bar << endl; |
---|
173 | |
---|
174 | double sigmaMin = 1e30; |
---|
175 | int iBest = -100; |
---|
176 | int i1Best = -100; |
---|
177 | int i2Best = -100; |
---|
178 | double sigV[121]; |
---|
179 | |
---|
180 | for (int i = 0; i < 121; i++){ |
---|
181 | double F1Cat1 = (double)i1Sig[i]/iTot[0]; |
---|
182 | double F1Cat2 = (double)i2Sig[i]/iTot[0]; |
---|
183 | double F1Cat3 = (double)i3Sig[i]/iTot[0]; |
---|
184 | double F1Cat4 = (double)i4Sig[i]/iTot[0]; |
---|
185 | double F1Cat5 = (double)i5Sig[i]/iTot[0]; |
---|
186 | double F1Cat6 = (double)i6Sig[i]/iTot[0]; |
---|
187 | |
---|
188 | double F0Cat1 = (double)i1Bkg[i]/iTot[1]; |
---|
189 | double F0Cat2 = (double)i2Bkg[i]/iTot[1]; |
---|
190 | double F0Cat3 = (double)i3Bkg[i]/iTot[1]; |
---|
191 | double F0Cat4 = (double)i4Bkg[i]/iTot[1]; |
---|
192 | double F0Cat5 = (double)i5Bkg[i]/iTot[1]; |
---|
193 | double F0Cat6 = (double)i6Bkg[i]/iTot[1]; |
---|
194 | |
---|
195 | //Store the value of the best cuts |
---|
196 | if (i==95){ |
---|
197 | fprintf(fRes3,"%10.2f %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f %10.2f",F1Cat1,F1Cat2,F1Cat3,F1Cat4,F1Cat5,F1Cat6,F0Cat1,F0Cat2,F0Cat3,F0Cat4,F0Cat5,F0Cat6); |
---|
198 | fclose(fRes3); |
---|
199 | } |
---|
200 | |
---|
201 | double T1 = F1Cat1*F1Cat1/(N1_bar*F1Cat1 + N0_bar*F0Cat1); |
---|
202 | if (F1Cat1==0 && F0Cat1==0) T1 = 0; |
---|
203 | double T2 = F1Cat2*F1Cat2/(N1_bar*F1Cat2 + N0_bar*F0Cat2); |
---|
204 | if (F1Cat2==0 && F0Cat2==0) T2 = 0; |
---|
205 | double T3 = F1Cat3*F1Cat3/(N1_bar*F1Cat3 + N0_bar*F0Cat3); |
---|
206 | if (F1Cat3==0 && F0Cat3==0) T3 = 0; |
---|
207 | double T4 = F1Cat4*F1Cat4/(N1_bar*F1Cat4 + N0_bar*F0Cat4); |
---|
208 | if (F1Cat4==0 && F0Cat4==0) T4 = 0; |
---|
209 | double T5 = F1Cat5*F1Cat5/(N1_bar*F1Cat5 + N0_bar*F0Cat5); |
---|
210 | if (F1Cat5==0 && F0Cat5==0) T5 = 0; |
---|
211 | double T6 = F1Cat6*F1Cat6/(N1_bar*F1Cat6 + N0_bar*F0Cat6); |
---|
212 | if (F1Cat6==0 && F0Cat6==0) T6 = 0; |
---|
213 | |
---|
214 | double sigmaInv = T1 + T2 + T3 + T4 + T5 + T6; |
---|
215 | double sigma2 = 1/N1_bar/sigmaInv; |
---|
216 | double sigma = sqrt(sigma2); |
---|
217 | sigV[i] = sigma; |
---|
218 | |
---|
219 | cout << "sigmaInv = " << sigmaInv << " sigma = " << sigma << endl; |
---|
220 | |
---|
221 | h_sigma->Fill(i,sigma); |
---|
222 | |
---|
223 | if (sigma < sigmaMin){ |
---|
224 | sigmaMin = sigma; |
---|
225 | iBest = i; |
---|
226 | } |
---|
227 | } |
---|
228 | |
---|
229 | cout << "iTot[0] = " << iTot[0] << endl; |
---|
230 | cout << "iTot[1] = " << iTot[1] << endl; |
---|
231 | cout << "sigmaMin = " << sigmaMin << endl; |
---|
232 | cout << "iBest = " << iBest << endl; |
---|
233 | |
---|
234 | for (int i = 0; i < 11; i++){ |
---|
235 | for (int j = 0; j < 11; j++){ |
---|
236 | int iC0 = 11*i + j; |
---|
237 | for (int k = 0; k < 1; k++){ |
---|
238 | int iC = 1*iC0 + k; |
---|
239 | double Cut1 = cos1V[i]; |
---|
240 | double Cut2 = cos2V[j]; |
---|
241 | |
---|
242 | h_sigma2D->Fill(cos1V[i],cos2V[j],sigV[iC]); |
---|
243 | |
---|
244 | if (iC==iBest) { |
---|
245 | i1Best = i; |
---|
246 | i2Best = j; |
---|
247 | cout << "i1Best = " << i << endl; |
---|
248 | cout << "i2Best = " << j << endl; |
---|
249 | cout << "cos1 = " << cos1V[i] << endl; |
---|
250 | cout << "cos2 = " << cos2V[j] << endl; |
---|
251 | cout << "dMin = " << dMinV[k] << endl; |
---|
252 | } |
---|
253 | |
---|
254 | if (cos1V[i]==0.6) |
---|
255 | cout << "Cut1 = 0.6" << endl; |
---|
256 | if (cos2V[j]==0.6) |
---|
257 | cout << "Cut2 = 0.6" << endl; |
---|
258 | |
---|
259 | if (cos1V[i] == 0.6 && cos2V[j] == 0.6){ |
---|
260 | cout << "sigma when Cut1=0.6 and Cut2=0.6 : " << sigV[iC] << endl; |
---|
261 | } |
---|
262 | if (i==6 && j==6){ |
---|
263 | cout << "sigma when i=6 and j=6 : " << sigV[iC] << endl; |
---|
264 | } |
---|
265 | if (i==i1Best&&j==i2Best) |
---|
266 | cout << "sigma when i1Best and i2Best : " << sigV[iC] << endl;; |
---|
267 | } |
---|
268 | } |
---|
269 | } |
---|
270 | |
---|
271 | TCanvas *c1 = new TCanvas("c1", "", 500,400); |
---|
272 | c1->cd(); |
---|
273 | h_sigma->SetLineWidth(3); |
---|
274 | h_sigma->Draw(); |
---|
275 | |
---|
276 | TCanvas *c2 = new TCanvas("c2", "", 500,400); |
---|
277 | c2->cd(); |
---|
278 | h_sigma2D->Draw("CONT4Z"); |
---|
279 | |
---|
280 | c1->Print("Sigma_WithoutMinLep.ps"); |
---|
281 | c2->Print("Sigma2D_WithoutMinLep.ps"); |
---|
282 | } |
---|