30 #if (!defined(__CINT__) && !defined(__CLING__))
33 #if defined(__MAKECINT__) || defined(__ROOTCLING__) || defined(COMPILER)
39 using namespace RestFrames;
41 void example_N_Wlnu(
const std::string& output_name =
42 "output_example_N_Wlnu.root"){
53 g_Log << LogInfo <<
"Initializing generator frames and tree..." << LogEnd;
85 LAB_G2W.SetChildFrame(CM_G2W); LAB_G3W.SetChildFrame(CM_G3W);
86 CM_G2W.AddChildFrame(Wa_G2W); CM_G3W.AddChildFrame(Wa_G3W);
87 CM_G2W.AddChildFrame(Wb_G2W); CM_G3W.AddChildFrame(Wb_G3W);
88 Wa_G2W.AddChildFrame(La_G2W); CM_G3W.AddChildFrame(Wc_G3W);
89 Wa_G2W.AddChildFrame(Na_G2W); Wa_G3W.AddChildFrame(La_G3W);
90 Wb_G2W.AddChildFrame(Lb_G2W); Wa_G3W.AddChildFrame(Na_G3W);
91 Wb_G2W.AddChildFrame(Nb_G2W); Wb_G3W.AddChildFrame(Lb_G3W);
92 Wb_G3W.AddChildFrame(Nb_G3W);
93 LAB_G4W.SetChildFrame(CM_G4W); Wc_G3W.AddChildFrame(Lc_G3W);
94 CM_G4W.AddChildFrame(Wa_G4W); Wc_G3W.AddChildFrame(Nc_G3W);
95 CM_G4W.AddChildFrame(Wb_G4W);
96 CM_G4W.AddChildFrame(Wc_G4W);
97 CM_G4W.AddChildFrame(Wd_G4W);
98 Wa_G4W.AddChildFrame(La_G4W);
99 Wa_G4W.AddChildFrame(Na_G4W);
100 Wb_G4W.AddChildFrame(Lb_G4W);
101 Wb_G4W.AddChildFrame(Nb_G4W);
102 Wc_G4W.AddChildFrame(Lc_G4W);
103 Wc_G4W.AddChildFrame(Nc_G4W);
104 Wd_G4W.AddChildFrame(Ld_G4W);
105 Wd_G4W.AddChildFrame(Nd_G4W);
107 if(LAB_G2W.InitializeTree() && LAB_G3W.InitializeTree() &&
108 LAB_G4W.InitializeTree())
109 g_Log << LogInfo <<
"...Successfully initialized generator trees" << LogEnd;
111 g_Log << LogError <<
"...Failed initializing generator trees" << LogEnd;
116 CM_G2W.SetVariableMass(
true); CM_G3W.SetVariableMass(
true); CM_G4W.SetVariableMass(
true);
118 Wa_G2W.SetMass(mW); Wb_G2W.SetMass(mW);
119 Wa_G3W.SetMass(mW); Wb_G3W.SetMass(mW); Wc_G3W.SetMass(mW);
120 Wa_G4W.SetMass(mW); Wb_G4W.SetMass(mW); Wc_G4W.SetMass(mW); Wd_G4W.SetMass(mW);
121 Wa_G2W.SetWidth(wW); Wb_G2W.SetWidth(wW);
122 Wa_G3W.SetWidth(wW); Wb_G3W.SetWidth(wW); Wc_G3W.SetWidth(wW);
123 Wa_G4W.SetWidth(wW); Wb_G4W.SetWidth(wW); Wc_G4W.SetWidth(wW); Wd_G4W.SetWidth(wW);
125 La_G2W.SetMass(mL); Lb_G2W.SetMass(mL);
126 La_G3W.SetMass(mL); Lb_G3W.SetMass(mL); Lc_G3W.SetMass(mL);
127 La_G4W.SetMass(mL); Lb_G4W.SetMass(mL); Lc_G4W.SetMass(mL); Ld_G4W.SetMass(mL);
129 Na_G2W.SetMass(mN); Nb_G2W.SetMass(mN);
130 Na_G3W.SetMass(mN); Nb_G3W.SetMass(mN); Nc_G3W.SetMass(mN);
131 Na_G4W.SetMass(mN); Nb_G4W.SetMass(mN); Nc_G4W.SetMass(mN); Nd_G4W.SetMass(mN);
134 La_G2W.SetPtCut(15.); Lb_G2W.SetPtCut(15.);
135 La_G2W.SetEtaCut(2.5); Lb_G2W.SetEtaCut(2.5);
136 La_G3W.SetPtCut(15.); Lb_G3W.SetPtCut(15.); Lc_G3W.SetPtCut(15.);
137 La_G3W.SetEtaCut(2.5); Lb_G3W.SetEtaCut(2.5); Lc_G3W.SetEtaCut(2.5);
138 La_G4W.SetPtCut(15.); Lb_G4W.SetPtCut(15.); Lc_G4W.SetPtCut(15.); Ld_G4W.SetPtCut(15.);
139 La_G4W.SetEtaCut(2.5); Lb_G4W.SetEtaCut(2.5); Lc_G4W.SetEtaCut(2.5); Ld_G4W.SetEtaCut(2.5);
141 if(LAB_G2W.InitializeAnalysis() && LAB_G3W.InitializeAnalysis() &&
142 LAB_G4W.InitializeAnalysis())
143 g_Log << LogInfo <<
"...Successfully initialized generator analyses" << LogEnd;
145 g_Log << LogError <<
"...Failed initializing generator analyses" << LogEnd;
150 g_Log << LogInfo <<
"Initializing reconstruction frames and trees..." << LogEnd;
182 LAB_2W.SetChildFrame(CM_2W); LAB_3W.SetChildFrame(CM_3W);
183 CM_2W.AddChildFrame(Wa_2W); CM_3W.AddChildFrame(Wa_3W);
184 CM_2W.AddChildFrame(Wb_2W); CM_3W.AddChildFrame(Wb_3W);
185 Wa_2W.AddChildFrame(La_2W); CM_3W.AddChildFrame(Wc_3W);
186 Wa_2W.AddChildFrame(Na_2W); Wa_3W.AddChildFrame(La_3W);
187 Wb_2W.AddChildFrame(Lb_2W); Wa_3W.AddChildFrame(Na_3W);
188 Wb_2W.AddChildFrame(Nb_2W); Wb_3W.AddChildFrame(Lb_3W);
189 Wb_3W.AddChildFrame(Nb_3W);
190 LAB_4W.SetChildFrame(CM_4W); Wc_3W.AddChildFrame(Lc_3W);
191 CM_4W.AddChildFrame(Wa_4W); Wc_3W.AddChildFrame(Nc_3W);
192 CM_4W.AddChildFrame(Wb_4W);
193 CM_4W.AddChildFrame(Wc_4W);
194 CM_4W.AddChildFrame(Wd_4W);
195 Wa_4W.AddChildFrame(La_4W);
196 Wa_4W.AddChildFrame(Na_4W);
197 Wb_4W.AddChildFrame(Lb_4W);
198 Wb_4W.AddChildFrame(Nb_4W);
199 Wc_4W.AddChildFrame(Lc_4W);
200 Wc_4W.AddChildFrame(Nc_4W);
201 Wd_4W.AddChildFrame(Ld_4W);
202 Wd_4W.AddChildFrame(Nd_4W);
204 if(LAB_2W.InitializeTree() && LAB_3W.InitializeTree() &&
205 LAB_4W.InitializeTree())
206 g_Log << LogInfo <<
"...Successfully initialized reconstruction trees" << LogEnd;
208 g_Log << LogError <<
"...Failed initializing reconstruction trees" << LogEnd;
214 INV_2W.AddFrame(Na_2W);
215 INV_2W.AddFrame(Nb_2W);
217 INV_3W.AddFrame(Na_3W);
218 INV_3W.AddFrame(Nb_3W);
219 INV_3W.AddFrame(Nc_3W);
221 INV_4W.AddFrame(Na_4W);
222 INV_4W.AddFrame(Nb_4W);
223 INV_4W.AddFrame(Nc_4W);
224 INV_4W.AddFrame(Nd_4W);
228 INV_2W.AddJigsaw(NuNuM_2W);
229 SetMassInvJigsaw NuNuM_3W(
"NuNuM_3W",
"M_{#nu#nu#nu} ~ m_{#it{l}#it{l}#it{l}}");
230 INV_3W.AddJigsaw(NuNuM_3W);
231 SetMassInvJigsaw NuNuM_4W(
"NuNuM_4W",
"M_{#nu#nu#nu#nu} ~ m_{#it{l}#it{l}#it{l}#it{l}}");
232 INV_4W.AddJigsaw(NuNuM_4W);
236 INV_2W.AddJigsaw(NuNuR_2W);
237 NuNuR_2W.AddVisibleFrames(La_2W+Lb_2W);
239 INV_3W.AddJigsaw(NuNuR_3W);
240 NuNuR_3W.AddVisibleFrames(La_3W+Lb_3W+Lc_3W);
241 SetRapidityInvJigsaw NuNuR_4W(
"NuNuR_4W",
"#eta_{#nu#nu#nu#nu} = #eta_{#it{l}#it{l}#it{l}#it{l}}");
242 INV_4W.AddJigsaw(NuNuR_4W);
243 NuNuR_4W.AddVisibleFrames(La_4W+Lb_4W+Lc_4W+Ld_4W);
247 INV_2W.AddJigsaw(MinMW_2W);
248 MinMW_2W.AddVisibleFrame(La_2W, 0); MinMW_2W.AddInvisibleFrame(Na_2W, 0);
249 MinMW_2W.AddVisibleFrame(Lb_2W, 1); MinMW_2W.AddInvisibleFrame(Nb_2W, 1);
251 INV_3W.AddJigsaw(MinMW_3W);
252 MinMW_3W.AddVisibleFrame(La_3W, 0); MinMW_3W.AddInvisibleFrame(Na_3W, 0);
253 MinMW_3W.AddVisibleFrame(Lb_3W, 1); MinMW_3W.AddInvisibleFrame(Nb_3W, 1);
254 MinMW_3W.AddVisibleFrame(Lc_3W, 2); MinMW_3W.AddInvisibleFrame(Nc_3W, 2);
256 INV_4W.AddJigsaw(MinMW_4W);
257 MinMW_4W.AddVisibleFrame(La_4W, 0); MinMW_4W.AddInvisibleFrame(Na_4W, 0);
258 MinMW_4W.AddVisibleFrame(Lb_4W, 1); MinMW_4W.AddInvisibleFrame(Nb_4W, 1);
259 MinMW_4W.AddVisibleFrame(Lc_4W, 2); MinMW_4W.AddInvisibleFrame(Nc_4W, 2);
260 MinMW_4W.AddVisibleFrame(Ld_4W, 3); MinMW_4W.AddInvisibleFrame(Nd_4W, 3);
262 if(LAB_2W.InitializeAnalysis() && LAB_3W.InitializeAnalysis() &&
263 LAB_4W.InitializeAnalysis())
264 g_Log << LogInfo <<
"...Successfully initialized analyses" << LogEnd;
266 g_Log << LogError <<
"...Failed initializing analyses" << LogEnd;
274 treePlot->
Draw(
"Reco_2W_Tree",
"2W Reconstruction Tree");
277 treePlot->
Draw(
"Reco_3W_Tree",
"3W Reconstruction Tree");
280 treePlot->
Draw(
"Reco_4W_Tree",
"4W Reconstruction Tree");
283 treePlot->
Draw(
"Inv_2W_Tree",
"2W Inivisible Jigsaws",
true);
286 treePlot->
Draw(
"Inv_3W_Tree",
"3W Inivisible Jigsaws",
true);
289 treePlot->
Draw(
"Inv_4W_Tree",
"4W Inivisible Jigsaws",
true);
293 HistPlot* histPlot =
new HistPlot(
"HistPlot",
"pp #rightarrow N W(#it{l} #nu)");
301 "#sqrt{#Sigma M_{W}^{ 2} / #Sigma m_{W, true}^{ 2}}", 0., 1.5);
304 histPlot->
AddPlot(MCM, cat_2W+cat_3W+cat_4W);
305 histPlot->
AddPlot(sumMW2, cat_2W+cat_3W+cat_4W);
306 histPlot->
AddPlot(MCM, sumMW2, cat_2W+cat_3W+cat_4W);
309 for(
int igen = 0; igen < Ngen; igen++){
310 if(igen%(Ngen/10) == 0)
311 g_Log << LogInfo <<
"Generating event " << igen <<
" of " << Ngen << LogEnd;
314 LAB_G2W.ClearEvent();
315 LAB_G2W.AnalyzeEvent();
316 LAB_G3W.ClearEvent();
317 LAB_G3W.AnalyzeEvent();
318 LAB_G4W.ClearEvent();
319 LAB_G4W.AnalyzeEvent();
321 TVector3 MET_2W = LAB_G2W.GetInvisibleMomentum();
323 TVector3 MET_3W = LAB_G3W.GetInvisibleMomentum();
325 TVector3 MET_4W = LAB_G4W.GetInvisibleMomentum();
330 INV_2W.SetLabFrameThreeVector(MET_2W);
332 INV_3W.SetLabFrameThreeVector(MET_3W);
334 INV_4W.SetLabFrameThreeVector(MET_4W);
336 La_2W.SetLabFrameFourVector(La_G2W.GetFourVector());
337 Lb_2W.SetLabFrameFourVector(Lb_G2W.GetFourVector());
338 La_3W.SetLabFrameFourVector(La_G3W.GetFourVector());
339 Lb_3W.SetLabFrameFourVector(Lb_G3W.GetFourVector());
340 Lc_3W.SetLabFrameFourVector(Lc_G3W.GetFourVector());
341 La_4W.SetLabFrameFourVector(La_G4W.GetFourVector());
342 Lb_4W.SetLabFrameFourVector(Lb_G4W.GetFourVector());
343 Lc_4W.SetLabFrameFourVector(Lc_G4W.GetFourVector());
344 Ld_4W.SetLabFrameFourVector(Ld_G4W.GetFourVector());
346 LAB_2W.AnalyzeEvent();
347 LAB_3W.AnalyzeEvent();
348 LAB_4W.AnalyzeEvent();
354 MCM = CM_2W.GetMass()/CM_G2W.GetMass();
355 sumMW2 = Wa_2W.GetMass()*Wa_2W.GetMass();
356 sumMW2 += Wb_2W.GetMass()*Wb_2W.GetMass();
357 sumMW2gen = Wa_G2W.GetMass()*Wa_G2W.GetMass();
358 sumMW2gen += Wb_G2W.GetMass()*Wb_G2W.GetMass();
360 sumMW2 = sqrt(sumMW2);
362 histPlot->
Fill(cat_2W);
364 MCM = CM_3W.GetMass()/CM_G3W.GetMass();
365 sumMW2 = Wa_3W.GetMass()*Wa_3W.GetMass();
366 sumMW2 += Wb_3W.GetMass()*Wb_3W.GetMass();
367 sumMW2 += Wc_3W.GetMass()*Wc_3W.GetMass();
368 sumMW2gen = Wa_G3W.GetMass()*Wa_G3W.GetMass();
369 sumMW2gen += Wb_G3W.GetMass()*Wb_G3W.GetMass();
370 sumMW2gen += Wc_G3W.GetMass()*Wc_G3W.GetMass();
372 sumMW2 = sqrt(sumMW2);
374 histPlot->
Fill(cat_3W);
376 MCM = CM_4W.GetMass()/CM_G4W.GetMass();
377 sumMW2 = Wa_4W.GetMass()*Wa_4W.GetMass();
378 sumMW2 += Wb_4W.GetMass()*Wb_4W.GetMass();
379 sumMW2 += Wc_4W.GetMass()*Wc_4W.GetMass();
380 sumMW2 += Wd_4W.GetMass()*Wd_4W.GetMass();
381 sumMW2gen = Wa_G4W.GetMass()*Wa_G4W.GetMass();
382 sumMW2gen += Wb_G4W.GetMass()*Wb_G4W.GetMass();
383 sumMW2gen += Wc_G4W.GetMass()*Wc_G4W.GetMass();
384 sumMW2gen += Wd_G4W.GetMass()*Wd_G4W.GetMass();
386 sumMW2 = sqrt(sumMW2);
388 histPlot->
Fill(cat_4W);
393 TFile fout(output_name.c_str(),
"RECREATE");
399 g_Log << LogInfo <<
"Finished" << LogEnd;
402 # ifndef __CINT__ // main function for stand-alone compilation