ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/additionalFiles/DataCards/IntermediateMassMakerWH.C
Revision: 1.3
Committed: Sun Oct 28 15:41:19 2012 UTC (12 years, 6 months ago) by madfish
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +12 -7 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "TH1.h"
2 #include "TH1F.h"
3 #include "TTree.h"
4 #include "TFile.h"
5 #include "TString.h"
6 #include "TCut.h"
7 #include "TCanvas.h"
8 #include "TPad.h"
9 #include "TLatex.h"
10 #include "math.h"
11 #include "TMath.h"
12 #include <iostream>
13 #include <fstream>
14 #include "TLine.h"
15 #include "TROOT.h"
16 #include "TStyle.h"
17 #include "TPaveText.h"
18 #include "TLegend.h"
19 #include "THStack.h"
20 #include "TList.h"
21 #include "xsec7TeV.h"
22 #include "xsec8TeV.h"
23 #include "filesWH.h"
24 #include "RooArgList.h"
25 #include "RooRealVar.h"
26 #include "RooWorkspace.h"
27 #include "RooDataHist.h"
28 #include "RooHistPdf.h"
29 #include "tdrstyle.h"
30
31 const int bins = 25;
32 int kount;
33 int kount2;
34 TString IFILE;
35 int maxCount;
36
37 std::string massS[67]={
38 "110","110.5","111","111.5","112","112.5","113","113.5","114","114.5",
39 "115","115.5","116","116.5","117","117.5","118","118.5","119","119.5",
40 "120","120.5","121","121.5","122","122.5","123","123.5","124","124.5",
41 "125","125.5","126","126.5","127","127.5","128","128.5","129","129.5",
42 "130","130.5","131","131.5","132","132.5","133","133.5","134","134.5",
43 "135","124.6","124.7","124.8","124.9","125.1","125.2","125.3","125.4",
44 "125.6","125.7","125.8","125.9","126.1","126.2","126.3","126.4"
45 };
46
47
48
49 void makeSystPlot( TFile * f, TString myRooWS, RooWorkspace *WS, string channel, string syst, int toMassNo, int fromMassNo) //massNo 0-51, see xSec7TeV.h
50 {
51
52 RooArgList * hobs = new RooArgList("hobs");
53 RooRealVar BDT("CMS_vhbb_BDT_Wln_8TeV", "CMS_vhbb_BDT_Wln_8TeV", -1, 1);///OLD VARIABLE NAME HERE
54 hobs->add(*WS->var("CMS_vhbb_BDT_Wln_8TeV")); ///NEW VARIABLE NAME HERE
55 RooWorkspace *tempWS = (RooWorkspace*) f->Get(myRooWS.Data());
56 TString systT(syst);
57 TString chanT(channel);
58
59 bool writeIt = 1;
60
61 if(chanT.Contains("QCD"))
62 if(!(systT.Contains("stat"))) writeIt = 0;
63
64
65 if((kount < 3) && (channel=="data_obs"))
66 {
67 kount++;
68 std::string namen = channel;
69
70 std::cout << myRooWS.Data() << std::endl;
71 std::cout << namen << std::endl;
72 RooDataHist* tempRooDataHistNom = (RooDataHist*) tempWS->data(namen.c_str());
73 TH1 *tempHistNom = tempRooDataHistNom->createHistogram(namen.c_str(),BDT,Binning(bins));
74
75 RooDataHist *DHnom = new RooDataHist(channel.c_str(),"",*hobs,tempHistNom);
76 WS->import(*(new RooHistPdf(channel.c_str(),"",*hobs,*DHnom)));
77
78 }
79
80 if (channel!="data_obs")
81 {
82 std::string nameUp;
83 std::string namen;
84 std::string nameDown;
85
86
87 if(syst == "stat")
88 {
89 if(myRooWS.Contains("Wen"))
90 {
91 nameUp = channel + "_CMS_vhbb_stat" + channel + "_WenuUp";
92 namen = channel;
93 nameDown = channel + "_CMS_vhbb_stat" + channel + "_WenuDown";
94
95 if(channel == "s_Top")
96 {
97 nameUp = channel + "_CMS_vhbb_statsTop_WenuUp";
98 namen = channel;
99 nameDown = channel + "_CMS_vhbb_statsTop_WenuDown";
100 }
101
102 }
103 else
104 {
105 nameUp = channel + "_CMS_vhbb_stat" + channel + "_WmunuUp";
106 namen = channel;
107 nameDown = channel + "_CMS_vhbb_stat" + channel + "_WmunuDown";
108
109 if(channel == "s_Top")
110 {
111 nameUp = channel + "_CMS_vhbb_statsTop_WmunuUp";
112 namen = channel;
113 nameDown = channel + "_CMS_vhbb_statsTop_WmunuDown";
114 }
115
116
117 }
118 }
119 else
120 {
121 nameUp = channel + "_CMS_" + syst + "Up";
122 namen = channel;
123 nameDown = channel + "_CMS_" + syst + "Down";
124 }
125
126 if((syst == "stat") && (myRooWS.Contains("High")))
127 {
128 if(myRooWS.Contains("Wen"))
129 {
130 nameUp = channel + "_CMS_vhbb_stat" + channel + "_Wenu2Up";
131 namen = channel;
132 nameDown = channel + "_CMS_vhbb_stat" + channel + "_Wenu2Down";
133
134 if(channel == "s_Top")
135 {
136 nameUp = channel + "_CMS_vhbb_statsTop_Wenu2Up";
137 namen = channel;
138 nameDown = channel + "_CMS_vhbb_statsTop_Wenu2Down";
139 }
140
141 }
142 else
143 {
144 nameUp = channel + "_CMS_vhbb_stat" + channel + "_Wmunu2Up";
145 namen = channel;
146 nameDown = channel + "_CMS_vhbb_stat" + channel + "_Wmunu2Down";
147
148 if(channel == "s_Top")
149 {
150 nameUp = channel + "_CMS_vhbb_statsTop_Wmunu2Up";
151 namen = channel;
152 nameDown = channel + "_CMS_vhbb_statsTop_Wmunu2Down";
153 }
154
155
156 }
157 }
158
159 if(systT.Contains("Model"))
160 {
161 nameUp = channel + "_CMS_vhbb_WModelUp";
162 namen = channel;
163 nameDown = channel + "_CMS_vhbb_WModelDown";
164 }
165
166 if( systT.Contains("stat") && (myRooWS.Contains("Wen")) && IFILE.Contains("8TeV") && !(myRooWS.Contains("High")))
167 {
168 nameUp = channel + "_CMS_vhbb_stat" + channel + "_Wenu_8TeVUp";
169 namen = channel;
170 nameDown = channel + "_CMS_vhbb_stat" + channel + "_Wenu_8TeVDown";
171
172 if(channel == "s_Top")
173 {
174 nameUp = channel + "_CMS_vhbb_statsTop_Wenu_8TeVUp";
175 namen = channel;
176 nameDown = channel + "_CMS_vhbb_statsTop_Wenu_8TeVDown";
177 }
178
179
180 }
181
182 if( systT.Contains("stat") && (myRooWS.Contains("Wmn")) && IFILE.Contains("8TeV") && !(myRooWS.Contains("High")))
183 {
184 nameUp = channel + "_CMS_vhbb_stat" + channel + "_Wmunu_8TeVUp";
185 namen = channel;
186 nameDown = channel + "_CMS_vhbb_stat" + channel + "_Wmunu_8TeVDown";
187
188 if(channel == "s_Top")
189 {
190 nameUp = channel + "_CMS_vhbb_statsTop_Wmunu_8TeVUp";
191 namen = channel;
192 nameDown = channel + "_CMS_vhbb_statsTop_Wmunu_8TeVDown";
193 }
194
195
196 }
197
198
199 if( systT.Contains("stat") && (myRooWS.Contains("Wen")) && IFILE.Contains("8TeV") && (myRooWS.Contains("High")))
200 {
201 nameUp = channel + "_CMS_vhbb_stat" + channel + "_Wenu2_8TeVUp";
202 namen = channel;
203 nameDown = channel + "_CMS_vhbb_stat" + channel + "_Wenu2_8TeVDown";
204
205 if(channel == "s_Top")
206 {
207 nameUp = channel + "_CMS_vhbb_statsTop_Wenu2_8TeVUp";
208 namen = channel;
209 nameDown = channel + "_CMS_vhbb_statsTop_Wenu2_8TeVDown";
210 }
211
212
213 }
214
215 if( systT.Contains("stat") && (myRooWS.Contains("Wmn")) && IFILE.Contains("8TeV") && (myRooWS.Contains("High")))
216 {
217 nameUp = channel + "_CMS_vhbb_stat" + channel + "_Wmunu2_8TeVUp";
218 namen = channel;
219 nameDown = channel + "_CMS_vhbb_stat" + channel + "_Wmunu2_8TeVDown";
220
221 if(channel == "s_Top")
222 {
223 nameUp = channel + "_CMS_vhbb_statsTop_Wmunu2_8TeVUp";
224 namen = channel;
225 nameDown = channel + "_CMS_vhbb_statsTop_Wmunu2_8TeVDown";
226 }
227
228
229 }
230 if(writeIt)
231 {
232
233
234
235
236
237
238 RooDataHist* tempRooDataHistUp = (RooDataHist*) tempWS->data(nameUp.c_str());
239 RooDataHist* tempRooDataHistDown = (RooDataHist*) tempWS->data(nameDown.c_str());
240 RooDataHist* tempRooDataHistNom = (RooDataHist*) tempWS->data(namen.c_str());
241
242
243 std::cout << myRooWS.Data() << std::endl;
244 std::cout << nameUp.c_str() << std::endl;
245
246
247
248
249
250 TH1 *tempHistUp = tempRooDataHistUp->createHistogram(nameUp.c_str(),BDT,Binning(bins));
251 TH1 *tempHistDown = tempRooDataHistDown->createHistogram(nameDown.c_str(),BDT,Binning(bins));
252 TH1 *tempHistNom = tempRooDataHistNom->createHistogram(namen.c_str(),BDT,Binning(bins));
253
254 if(chanT.Contains("VH") && IFILE.Contains("7TeV"))
255 {
256 tempHistUp->Scale(xSec7WH[toMassNo]/xSec7WH[fromMassNo]);
257 tempHistDown->Scale(xSec7WH[toMassNo]/xSec7WH[fromMassNo]);
258 tempHistNom->Scale(xSec7WH[toMassNo]/xSec7WH[fromMassNo]);
259 }
260
261 if(chanT.Contains("VH") && IFILE.Contains("8TeV"))
262 {
263 tempHistUp->Scale(xSec8WH[toMassNo]/xSec8WH[fromMassNo]);
264 tempHistDown->Scale(xSec8WH[toMassNo]/xSec8WH[fromMassNo]);
265 tempHistNom->Scale(xSec8WH[toMassNo]/xSec8WH[fromMassNo]);
266 }
267
268 std::cout<< "channel--> " << channel << std::endl;
269
270
271
272 tempHistUp->SetLineColor(kRed);
273 tempHistUp->SetLineWidth(3);
274 tempHistUp->SetFillColor(0);
275
276 tempHistDown->SetLineColor(kBlue);
277 tempHistDown->SetFillColor(0);
278 tempHistDown->SetLineWidth(3);
279
280 tempHistNom->SetFillColor(0);
281 tempHistNom->SetMarkerStyle(20);
282
283 tempHistUp->SetTitle((channel + syst).c_str());
284
285 RooDataHist *DHnom;
286 RooDataHist *DHup = new RooDataHist(nameUp.c_str(),"",*hobs,tempHistUp);
287 if(kount2 < 3) DHnom = new RooDataHist(namen.c_str(),"",*hobs,tempHistNom);
288 RooDataHist *DHdown = new RooDataHist(nameDown.c_str(),"",*hobs,tempHistDown);
289
290 WS->import(*(new RooHistPdf(nameUp.c_str(),"",*hobs,*DHup)));
291 WS->import(*(new RooHistPdf(nameDown.c_str(),"",*hobs,*DHdown)));
292 if(kount2 < 3){ WS->import(*(new RooHistPdf(namen.c_str(),"",*hobs,*DHnom))); kount2++;}
293 }
294 }
295
296
297 }
298
299
300
301
302
303
304 void Process(TString fname, TString myRooWS, int toMass, int fromMass)
305 {
306
307
308
309
310 std::string channels[] = {"data_obs", "VH", "TT", "WjLF", "WjHF", "ZjLF", "ZjHF" , "VV" , "s_Top" };
311 std::string systs[] = {"eff_b", "fake_b_8TeV", "res_j", "scale_j" , "stat" };
312
313 kount = 0;
314
315 gROOT->SetStyle("Plain");
316 setTDRStyle();
317
318 TFile * file = new TFile(fname.Data(), "READ");
319 std::cout << "reading " << fname.Data() << std::endl;
320 TString outname(massS[toMass]);
321 outname.Append(".root");
322 fname.ReplaceAll(".root",outname.Data());
323 TFile * outfile = new TFile(fname.Data(), "RECREATE");
324
325 using namespace RooFit;
326 RooWorkspace *myWS = new RooWorkspace(myRooWS.Data(),myRooWS.Data());
327 myWS->factory("CMS_vhbb_BDT_Wln_8TeV[-1.,1.]"); ///NEW VARIABLE NAME HERE
328
329
330 for (int c =0; c<9; c++)
331 {
332 kount2 = 0;
333 for (int s =0; s<5 ; s++ ){
334 makeSystPlot( file, myRooWS, myWS, channels[c], systs[s], toMass, fromMass );
335 }
336 }
337
338
339 if(!(IFILE.Contains("8TeV")))
340 {
341 makeSystPlot(file, myRooWS, myWS, "WjLF", "WModel",toMass, fromMass);
342 makeSystPlot(file, myRooWS, myWS, "WjHF", "WModel",toMass, fromMass);
343 }
344
345 myWS->writeToFile(fname.Data());
346 std::cout << std::endl << std::endl << std::endl << std::endl << "///////////////////////////" << std::endl;
347 std::cout << fname.Data() << " written" << std::endl;
348 std::cout << "///////////////////////////" << std::endl << std::endl << std::endl;
349 outfile->Write();
350 outfile->Close();
351
352
353 }
354
355
356
357
358
359 void IntermediateMassMakerWH()
360 {
361
362 maxCount=0;
363
364
365
366
367 for(int i = 0; i < n; i++)
368 {
369 TString myRooWS;
370 IFILE = files[i];
371
372 if(IFILE.Contains("7TeV"))
373 {
374 if(IFILE.Contains("Wenu")) myRooWS = "Wenu";
375 if(IFILE.Contains("Wmn"))myRooWS = "Wmunu";
376 }
377
378 if(IFILE.Contains ("Wmn") && IFILE.Contains("Low") && IFILE.Contains("8TeV")) myRooWS = "WmnLowPt_8TeV";
379 if(IFILE.Contains ("Wen") && IFILE.Contains("Low") && IFILE.Contains("8TeV")) myRooWS = "WenLowPt_8TeV";
380 if(IFILE.Contains ("Wmn") && IFILE.Contains("High") && IFILE.Contains("8TeV")) myRooWS = "WmnHighPt_8TeV";
381 if(IFILE.Contains ("Wen") && IFILE.Contains("High") && IFILE.Contains("8TeV")) myRooWS = "WenHighPt_8TeV";
382
383 if((IFILE.Contains("110")))
384 {
385 Process(IFILE, myRooWS, 0,0);
386 Process(IFILE, myRooWS, 1,0);
387 Process(IFILE, myRooWS, 2,0);
388 Process(IFILE, myRooWS, 3,0);
389 Process(IFILE, myRooWS, 4,0);
390 }
391 if((IFILE.Contains("115")))
392 {
393 for(int to = 5; to < 15; to++) Process(IFILE, myRooWS, to , 10);
394 }
395
396 if((IFILE.Contains("120")))
397 {
398 for(int to = 15; to < 25; to++) Process(IFILE, myRooWS,to , 20);
399 }
400
401 if((IFILE.Contains("125")))
402 {
403 for(int to = 25; to < 35; to++) Process(IFILE, myRooWS,to , 30);
404 for(int to = 51; to < 67; to++) Process(IFILE, myRooWS,to , 30);
405 }
406
407 if((IFILE.Contains("130")))
408 {
409 for(int to = 35; to < 45; to++) Process(IFILE, myRooWS,to , 40);
410 }
411
412
413 if((IFILE.Contains("135")))
414 {
415 for(int to = 45; to < 51; to++) Process(IFILE, myRooWS,to , 50);
416 }
417
418
419
420 }
421 }
422
423