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

# User Rev Content
1 madfish 1.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 madfish 1.3
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 madfish 1.1
48    
49 madfish 1.2 void makeSystPlot( TFile * f, TString myRooWS, RooWorkspace *WS, string channel, string syst, int toMassNo, int fromMassNo) //massNo 0-51, see xSec7TeV.h
50 madfish 1.1 {
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 madfish 1.2 RooWorkspace *tempWS = (RooWorkspace*) f->Get(myRooWS.Data());
56 madfish 1.1 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 madfish 1.2 std::cout << myRooWS.Data() << std::endl;
71 madfish 1.1 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 madfish 1.2 if(myRooWS.Contains("Wen"))
90 madfish 1.1 {
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 madfish 1.2 if((syst == "stat") && (myRooWS.Contains("High")))
127 madfish 1.1 {
128 madfish 1.2 if(myRooWS.Contains("Wen"))
129 madfish 1.1 {
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 madfish 1.2 if( systT.Contains("stat") && (myRooWS.Contains("Wen")) && IFILE.Contains("8TeV") && !(myRooWS.Contains("High")))
167 madfish 1.1 {
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 madfish 1.2 if( systT.Contains("stat") && (myRooWS.Contains("Wmn")) && IFILE.Contains("8TeV") && !(myRooWS.Contains("High")))
183 madfish 1.1 {
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 madfish 1.2 if( systT.Contains("stat") && (myRooWS.Contains("Wen")) && IFILE.Contains("8TeV") && (myRooWS.Contains("High")))
200 madfish 1.1 {
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 madfish 1.2 if( systT.Contains("stat") && (myRooWS.Contains("Wmn")) && IFILE.Contains("8TeV") && (myRooWS.Contains("High")))
216 madfish 1.1 {
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 madfish 1.2 std::cout << myRooWS.Data() << std::endl;
244 madfish 1.1 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 madfish 1.2 void Process(TString fname, TString myRooWS, int toMass, int fromMass)
305 madfish 1.1 {
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 madfish 1.2 RooWorkspace *myWS = new RooWorkspace(myRooWS.Data(),myRooWS.Data());
327 madfish 1.1 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 madfish 1.2 makeSystPlot( file, myRooWS, myWS, channels[c], systs[s], toMass, fromMass );
335 madfish 1.1 }
336     }
337    
338    
339     if(!(IFILE.Contains("8TeV")))
340     {
341 madfish 1.2 makeSystPlot(file, myRooWS, myWS, "WjLF", "WModel",toMass, fromMass);
342     makeSystPlot(file, myRooWS, myWS, "WjHF", "WModel",toMass, fromMass);
343 madfish 1.1 }
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 madfish 1.2 TString myRooWS;
370 madfish 1.1 IFILE = files[i];
371    
372     if(IFILE.Contains("7TeV"))
373     {
374 madfish 1.2 if(IFILE.Contains("Wenu")) myRooWS = "Wenu";
375     if(IFILE.Contains("Wmn"))myRooWS = "Wmunu";
376 madfish 1.1 }
377    
378 madfish 1.2 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 madfish 1.1
383     if((IFILE.Contains("110")))
384     {
385 madfish 1.2 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 madfish 1.1 }
391     if((IFILE.Contains("115")))
392     {
393 madfish 1.2 for(int to = 5; to < 15; to++) Process(IFILE, myRooWS, to , 10);
394 madfish 1.1 }
395    
396     if((IFILE.Contains("120")))
397     {
398 madfish 1.2 for(int to = 15; to < 25; to++) Process(IFILE, myRooWS,to , 20);
399 madfish 1.1 }
400    
401     if((IFILE.Contains("125")))
402     {
403 madfish 1.2 for(int to = 25; to < 35; to++) Process(IFILE, myRooWS,to , 30);
404 madfish 1.3 for(int to = 51; to < 67; to++) Process(IFILE, myRooWS,to , 30);
405 madfish 1.1 }
406    
407     if((IFILE.Contains("130")))
408     {
409 madfish 1.2 for(int to = 35; to < 45; to++) Process(IFILE, myRooWS,to , 40);
410 madfish 1.1 }
411    
412    
413     if((IFILE.Contains("135")))
414     {
415 madfish 1.2 for(int to = 45; to < 51; to++) Process(IFILE, myRooWS,to , 50);
416 madfish 1.1 }
417    
418    
419    
420     }
421     }
422    
423