JHUGen MELA  v2.4.1
Matrix element calculations as used in JHUGen. MELA is an important tool that was used for the Higgs boson discovery and for precise measurements of its structure and interactions. Please see the website https://spin.pha.jhu.edu/ and papers cited there for more details, and kindly cite those papers when using this code.
testME_v2.c
Go to the documentation of this file.
1 #include <iostream>
2 #include <fstream>
3 #include <cmath>
4 #include <string>
5 #include <vector>
6 #include <fstream>
7 #include <cstdlib>
8 #include <iomanip>
9 #include <memory>
10 #include "Mela.h"
11 #include "TMath.h"
12 #include "TLorentzVector.h"
13 #include "TLorentzRotation.h"
14 #include "TFile.h"
15 #include "TTree.h"
16 #include "TChain.h"
17 #include "TString.h"
18 #include "TH1F.h"
19 #include "TH2F.h"
20 #include "TH3F.h"
21 
22 
23 using namespace RooFit;
24 using namespace std;
25 
28  const double sqrts;
29  const double mh;
30 
31  MELAwithOptions(double sqrts_, double mh_, TVar::VerbosityLevel verbosity_=TVar::ERROR) :
32  sqrts(sqrts_), mh(mh_),
33  mela(new Mela(sqrts_, mh_, verbosity_))
34  { cout << "Called MELAwithOptions constructor!" << endl; }
35 
36  // FIXME: Not working yet, crashes after calling this destructor at delete mela
37  ~MELAwithOptions(){ cout << "Called MELAwithOptions destructor!" << endl; delete mela; }
38 };
39 
40 vector<unique_ptr<MELAwithOptions>> global_mela_list;
41 
42 Mela* getMela(double sqrts, double mh, TVar::VerbosityLevel verbosity=TVar::ERROR){
43  Mela* res=0;
44  int it=0;
45  for (auto& mwo : global_mela_list){
46  if (mwo->sqrts==sqrts && mwo->mh==mh){
47  res = mwo->mela;
48  break;
49  }
50  it++;
51  }
52  if (res==0){
53  unique_ptr<MELAwithOptions> tmp(new MELAwithOptions(sqrts, mh, verbosity));
54  global_mela_list.push_back(std::move(tmp));
55  res = global_mela_list.back()->mela;
56  }
57  res->setVerbosity(verbosity);
58  return res;
59 }
60 
61 
62 shared_ptr<Mela> makemelaptr(int erg_tev, float mPOLE, TVar::VerbosityLevel verbosity){
63  //function to make a shared_ptr in python, no idea how to do it directly
64  return make_shared<Mela>(erg_tev, mPOLE, verbosity);
65 }
66 
67 
68 void testME_Dec_ANALYTICAL_Ping(int erg_tev=13, bool useConstants=false, shared_ptr<Mela> melaptr=nullptr){
69  TString strtout = Form("testME_Dec_ANALYTICAL_Ping_%iTeV_%i.out", erg_tev, (int) useConstants);
70  ofstream tout(strtout.Data());
71  streambuf* coutbuf = cout.rdbuf();
72  cout.rdbuf(tout.rdbuf());
73 
74  float mPOLE=125.;
75  float wPOLE=4.07e-3;
76 
78  if (verbosity>=TVar::DEBUG) cout << "Initializing Mela..." << endl;
79  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
80  Mela& mela = *melaptr;
81  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
82  auto bkpprecision = cout.precision(10);
83  mela.setVerbosity(verbosity);
84  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
85  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
86 
87  int GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
88  const int nEntries = 6;
89  double a1_array[nEntries][4] ={
90  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 },
91  { 238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188 },
92  { 101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749 },
93  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
94  { 101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268 },
95  { 24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428 }
96  };
97  double a2_array[nEntries][4] ={
98  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
99  { 317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883 },
100  { 180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915 },
101  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
102  { 95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792 },
103  { 49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688 }
104  };
105  double l1_array[nEntries][4] ={
106  { 51.374202, 25.924766, 12.290178, 42.616376 },
107  { 51.374202, 25.924766, 12.290178, 42.616376 },
108  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
109  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
110  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
111  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
112  };
113  double l2_array[nEntries][4] ={
114  { 271.875752, 70.427173, -11.138146, 261.769598 },
115  { 21.481452, 9.489680, -9.336587, 16.858699 },
116  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
117  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
118  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
119  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
120  };
121  double l3_array[nEntries][4] ={
122  { 75.823478, -16.640412, 23.246999, 70.227220 },
123  { 75.823478, -16.640412, 23.246999, 70.227220 },
124  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
125  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
126  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
127  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
128  };
129  double l4_array[nEntries][4] ={
130  { 21.481452, 9.489680, -9.336587, 16.858699 },
131  { 271.875752, 70.427173, -11.138146, 261.769598 },
132  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
133  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
134  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
135  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
136  };
137 
138  // Decay mode does not matter, just use something
139  GenLep1Id=13;
140  GenLep2Id=-13;
141  GenLep3Id=11;
142  GenLep4Id=-11;
143 
144  for (int ev = 2; ev < 3; ev++){
145  SimpleParticleCollection_t aparticles;
146  TLorentzVector pAPart[2];
147  pAPart[0].SetXYZT(a1_array[ev][1], a1_array[ev][2], a1_array[ev][3], a1_array[ev][0]);
148  pAPart[1].SetXYZT(a2_array[ev][1], a2_array[ev][2], a2_array[ev][3], a2_array[ev][0]);
149  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t(0, pAPart[iap])); // q q'
150  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*13, pAPart[iap])); // l- l+
151  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*14, pAPart[iap])); // nub nu
152  for (unsigned int iap=0; iap<1; iap++) aparticles.push_back(SimpleParticle_t(22, pAPart[iap])); // gamma
153 
154  int idOrdered[4] ={ GenLep1Id, GenLep2Id, GenLep3Id, GenLep4Id };
155  TLorentzVector pOrdered[4];
156  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
157  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
158  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
159  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
161  for (unsigned int idau=0; idau<4; idau++) daughters.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
162 
163  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
164  mela.setInputEvent(&daughters, &aparticles, (SimpleParticleCollection_t*) 0, false);
165 
166  cout << "*******************************************************" << endl;
167  for (int ic=0; ic<mela.getNCandidates(); ic++){
168  cout << "Summary of candidate " << ic << ":" << endl;
169  mela.setCurrentCandidateFromIndex(ic);
170  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
171  cout << "*******************************************************" << endl;
172  }
173  cout << "*******************************************************" << endl;
174  cout << endl;
175 
176  int cindex;
177  cindex=0;
178  mela.setCurrentCandidateFromIndex(cindex);
179 
181 
182  cout << "*******************************************************" << endl;
183  cout << "Computing MEs for ZZ decay" << endl;
184 
185  float p0mplus=0;
187  mela.computeP(p0mplus, useConstants);
188  cout << "p0mplus: " << p0mplus << '\n' << endl;
189 
190  float p0hplus=0;
192  mela.computeP(p0hplus, useConstants);
193  cout << "p0hplus: " << p0hplus << '\n' << endl;
194 
195  float p0minus=0;
197  mela.computeP(p0minus, useConstants);
198  cout << "p0minus: " << p0minus << '\n' << endl;
199 
200  float pg1g2=0;
202  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
203  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
204  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
205  mela.computeP(pg1g2, useConstants);
206  cout << "pg1g2: " << pg1g2 << '\n' << endl;
207 
208  float pg1g4=0;
210  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
211  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
212  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
213  mela.computeP(pg1g4, useConstants);
214  cout << "pg1g4: " << pg1g4 << '\n' << endl;
215 
216  float pg1g2_im=0;
218  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
219  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
220  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1;
221  mela.computeP(pg1g2_im, useConstants);
222  cout << "pg1g2_im: " << pg1g2_im << '\n' << endl;
223 
224  float pg1g4_im=0;
226  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
227  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
228  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1;
229  mela.computeP(pg1g4_im, useConstants);
230  cout << "pg1g4_im: " << pg1g4_im << '\n' << endl;
231 
232  float p0mplus_ana=0;
234  mela.computeP(p0mplus_ana, useConstants);
235  cout << "p0mplus_ana: " << p0mplus_ana << '\n' << endl;
236 
237  float p0hplus_ana=0;
239  mela.computeP(p0hplus_ana, useConstants);
240  cout << "p0hplus_ana: " << p0hplus_ana << '\n' << endl;
241 
242  float p0minus_ana=0;
244  mela.computeP(p0minus_ana, useConstants);
245  cout << "p0minus_ana: " << p0minus_ana << '\n' << endl;
246 
247  float pg1g2_ana=0;
249  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
250  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
251  mela.computeP(pg1g2_ana, useConstants);
252  cout << "pg1g2_ana: " << pg1g2_ana << '\n' << endl;
253 
254  float pg1g4_ana=0;
256  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
257  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
258  mela.computeP(pg1g4_ana, useConstants);
259  cout << "pg1g4_ana: " << pg1g4_ana << '\n' << endl;
260 
261  float pg1g2_im_ana=0;
263  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
264  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1;
265  mela.computeP(pg1g2_im_ana, useConstants);
266  cout << "pg1g2_im_ana: " << pg1g2_im_ana << '\n' << endl;
267 
268  float pg1g4_im_ana=0;
270  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
271  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1;
272  mela.computeP(pg1g4_im_ana, useConstants);
273  cout << "pg1g4_im_ana: " << pg1g4_im_ana << '\n' << endl;
274 
275  mela.resetInputEvent();
276  }
277 
278  cout.rdbuf(coutbuf);
279  tout.close();
280  mela.setVerbosity(bkpverbosity);
281  cout.precision(bkpprecision);
282 }
283 
284 void testME_Dec_ANALYTICAL_FullSim(int erg_tev=13, bool useConstants=false, shared_ptr<Mela> melaptr=nullptr){
285  TString strtout = Form("testME_Dec_ANALYTICAL_FullSim_%iTeV_%i.out", erg_tev, (int) useConstants);
286  ofstream tout(strtout.Data());
287  streambuf* coutbuf = cout.rdbuf();
288  cout.rdbuf(tout.rdbuf());
289 
290  float mPOLE=125.;
291  float wPOLE=4.07e-3;
292 
293  TVar::VerbosityLevel verbosity = TVar::ERROR;
294  if (verbosity>=TVar::DEBUG) cout << "Initializing Mela..." << endl;
295  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
296  Mela& mela = *melaptr;
297  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
298  auto bkpprecision = cout.precision(10);
299  mela.setVerbosity(verbosity);
300  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
301  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
302 
303  TFile fin("a2.root", "read");
304  TTree* tin = (TTree*) fin.Get("SelectedTree");
305  float GenLepPt[4];
306  float GenLepEta[4];
307  float GenLepPhi[4];
308  float GenLepMass[4];
309  int GenLepId[4];
310  for (unsigned int ip=0; ip<4; ip++){
311  tin->SetBranchAddress(Form("GenLep%iPt", ip+1), GenLepPt+ip);
312  tin->SetBranchAddress(Form("GenLep%iEta", ip+1), GenLepEta+ip);
313  tin->SetBranchAddress(Form("GenLep%iPhi", ip+1), GenLepPhi+ip);
314  tin->SetBranchAddress(Form("GenLep%iMass", ip+1), GenLepMass+ip);
315  tin->SetBranchAddress(Form("GenLep%iId", ip+1), GenLepId+ip);
316  }
317  std::vector<float>* GenMotherPz=nullptr;
318  std::vector<int>* GenMotherId=nullptr;
319  tin->SetBranchAddress("GenMotherPz", &GenMotherPz);
320  tin->SetBranchAddress("GenMotherId", &GenMotherId);
321  float GenZMass[2];
322  for (unsigned int ip=0; ip<2; ip++) tin->SetBranchAddress(Form("GenZ%iMass", ip+1), GenZMass+ip);
323  float Gencosthetastar; tin->SetBranchAddress("Gencosthetastar", &Gencosthetastar);
324  float GenhelcosthetaZ1; tin->SetBranchAddress("GenhelcosthetaZ1", &GenhelcosthetaZ1);
325  float GenhelcosthetaZ2; tin->SetBranchAddress("GenhelcosthetaZ2", &GenhelcosthetaZ2);
326  float Genhelphi; tin->SetBranchAddress("Genhelphi", &Genhelphi);
327  float GenphistarZ1; tin->SetBranchAddress("GenphistarZ1", &GenphistarZ1);
328 
329 
330  TFile fout("test.root", "recreate");
331  TTree tnew("TestTree", "");
332  for (unsigned int ip=0; ip<4; ip++){
333  tnew.Branch(Form("GenLep%iPt", ip+1), GenLepPt+ip);
334  tnew.Branch(Form("GenLep%iEta", ip+1), GenLepEta+ip);
335  tnew.Branch(Form("GenLep%iPhi", ip+1), GenLepPhi+ip);
336  tnew.Branch(Form("GenLep%iMass", ip+1), GenLepMass+ip);
337  tnew.Branch(Form("GenLep%iId", ip+1), GenLepId+ip);
338  }
339  for (unsigned int ip=0; ip<2; ip++) tnew.Branch(Form("GenZ%iMass", ip+1), GenZMass+ip);
340  tnew.Branch("Gencosthetastar", &Gencosthetastar);
341  tnew.Branch("GenhelcosthetaZ1", &GenhelcosthetaZ1);
342  tnew.Branch("GenhelcosthetaZ2", &GenhelcosthetaZ2);
343  tnew.Branch("Genhelphi", &Genhelphi);
344  tnew.Branch("GenphistarZ1", &GenphistarZ1);
345 
346  float p0mplus=0; tnew.Branch("p0mplus", &p0mplus);
347  float p0hplus=0; tnew.Branch("p0hplus", &p0hplus);
348  float p0minus=0; tnew.Branch("p0minus", &p0minus);
349  float pg1g2=0; tnew.Branch("pg1g2", &pg1g2);
350  float pg1g4=0; tnew.Branch("pg1g4", &pg1g4);
351  float pg1g2_im=0; tnew.Branch("pg1g2_im", &pg1g2_im);
352  float pg1g4_im=0; tnew.Branch("pg1g4_im", &pg1g4_im);
353  float p0mplus_ana=0; tnew.Branch("p0mplus_ana", &p0mplus_ana);
354  float p0hplus_ana=0; tnew.Branch("p0hplus_ana", &p0hplus_ana);
355  float p0minus_ana=0; tnew.Branch("p0minus_ana", &p0minus_ana);
356  float pg1g2_ana=0; tnew.Branch("pg1g2_ana", &pg1g2_ana);
357  float pg1g4_ana=0; tnew.Branch("pg1g4_ana", &pg1g4_ana);
358  float pg1g2_im_ana=0; tnew.Branch("pg1g2_im_ana", &pg1g2_im_ana);
359  float pg1g4_im_ana=0; tnew.Branch("pg1g4_im_ana", &pg1g4_im_ana);
360 
361  int nEntries=tin->GetEntries();
362  for (int ev = 0; ev < nEntries; ev++){
363  tin->GetEntry(ev);
364 
366  for (unsigned int ip=0; ip<4; ip++){
367  TLorentzVector pDau;
368  pDau.SetPtEtaPhiM(
369  GenLepPt[ip],
370  GenLepEta[ip],
371  GenLepPhi[ip],
372  GenLepMass[ip]
373  );
374  daughters.push_back(SimpleParticle_t(GenLepId[ip], pDau));
375  }
377  for (unsigned int ip=0; ip<GenMotherId->size(); ip++){
378  TLorentzVector pMom(0,0, GenMotherPz->at(ip),std::abs(GenMotherPz->at(ip)));
379  mothers.push_back(SimpleParticle_t(GenMotherId->at(ip), pMom));
380  }
381 
382  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
383  mela.setInputEvent(&daughters, nullptr, &mothers);
384 
385  if (ev==0){
386  cout << "*******************************************************" << endl;
387  for (int ic=0; ic<mela.getNCandidates(); ic++){
388  cout << "Summary of candidate " << ic << ":" << endl;
389  mela.setCurrentCandidateFromIndex(ic);
390  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
391  cout << "*******************************************************" << endl;
392  }
393  cout << "*******************************************************" << endl;
394  cout << endl;
395  }
396 
397  int cindex;
398  cindex=0;
399  mela.setCurrentCandidateFromIndex(cindex);
400 
402  mela.computeP(p0mplus, useConstants);
403 
405  mela.computeP(p0hplus, useConstants);
406 
408  mela.computeP(p0minus, useConstants);
409 
411  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
412  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
413  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
414  mela.computeP(pg1g2, useConstants);
415 
417  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
418  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
419  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
420  mela.computeP(pg1g4, useConstants);
421 
423  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
424  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
425  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1;
426  mela.computeP(pg1g2_im, useConstants);
427 
429  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
430  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
431  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1;
432  mela.computeP(pg1g4_im, useConstants);
433 
435  mela.computeP(p0mplus_ana, useConstants);
436 
438  mela.computeP(p0hplus_ana, useConstants);
439 
441  mela.computeP(p0minus_ana, useConstants);
442 
444  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
445  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
446  mela.computeP(pg1g2_ana, useConstants);
447 
449  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
450  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
451  mela.computeP(pg1g4_ana, useConstants);
452 
454  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
455  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1;
456  mela.computeP(pg1g2_im_ana, useConstants);
457 
459  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
460  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1;
461  mela.computeP(pg1g4_im_ana, useConstants);
462 
463  mela.resetInputEvent();
464 
465  tnew.Fill();
466  }
467  fout.WriteTObject(&tnew);
468  fout.Close();
469  fin.Close();
470 
471  cout.rdbuf(coutbuf);
472  tout.close();
473  mela.setVerbosity(bkpverbosity);
474  cout.precision(bkpprecision);
475 }
476 
477 void testME_RenFacScales_Ping(shared_ptr<Mela> melaptr=nullptr){
478  ofstream tout(TString("testME_RenFacScales_Ping.out"));
479  streambuf* coutbuf = cout.rdbuf();
480  cout.rdbuf(tout.rdbuf());
481 
482  int erg_tev=13;
483  float mPOLE=125.;
484  float wPOLE=4.07e-3;
485 
486  TVar::VerbosityLevel verbosity = TVar::ERROR;
487  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
488  Mela& mela = *melaptr;
489  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
490  mela.setVerbosity(verbosity);
491  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
492 
493  float pingMom[8][4]={
494  { 0, 0, 865.37881546721542, 865.37881546721542 },
495  { 0, 0, -624.03396598421773, 624.03396598421773 },
496  { 7.6145299215002638, -17.259247740062808, 9.4660586470659975, 21.106135714241464 },
497  { 90.901719112641416, -69.683681833050798, 32.066319224729980, 118.94194752090492 },
498  { 78.476352131782917, -35.264818847819797, -8.8615639484695272, 86.490881645951262 },
499  { 191.68369742375290, -197.85205601463366, 100.99437243828194, 293.40746273989180 },
500  { -131.59521398083137, 330.56000090294270, 437.01695094737875, 563.53440884737279 },
501  { -237.08108460884614, -10.500196467375645, -329.33728782598945, 405.93194498307093 }
502  };
503  int idOrdered[8] ={ 1, 2, 11, -11, 13, -13, 1, 2 };
505  for (unsigned int ip=0; ip<2; ip++){
506  mothers.emplace_back(
507  idOrdered[ip],
508  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
509  );
510  }
512  for (unsigned int ip=2; ip<6; ip++){
513  daughters.emplace_back(
514  idOrdered[ip],
515  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
516  );
517  }
519  for (unsigned int ip=6; ip<8; ip++){
520  associated.emplace_back(
521  idOrdered[ip],
522  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
523  );
524  }
525  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
526  mela.setInputEvent(&daughters, &associated, &mothers, true);
527 
528  std::vector<TVar::EventScaleScheme> eventscaleschemes;
529  for (int is=0; is<(int) TVar::nEventScaleSchemes; is++) eventscaleschemes.push_back((TVar::EventScaleScheme) is);
530 
531  float meval_init;
533  mela.computeProdP(meval_init);
534  cout << "MELA default scheme setting gives ME val: " << meval_init << endl;
535  for (auto const& scheme : eventscaleschemes){
536  cout << "Using scale scheme: " << scheme << endl;
537  mela.setRenFacScaleMode(scheme, scheme, 1, 1); // Default is 0.5, 0.5, so even default scheme won't be the same.
538  float meval;
539  mela.computeProdP(meval);
540  cout << "\t- ME val: " << meval << endl;
541  if (meval==meval_init) cout << "\t- ERROR: meval==meval_init!" << endl;
542  }
543  float meval_final;
544  mela.computeProdP(meval_final);
545  cout << "Is MELA default scheme setting restored? " << (meval_final==meval_init) << endl;
546  if (meval_final!=meval_init) cout << "\t- ERROR: meval_final!=meval_init!" << endl;
547 
548  mela.resetInputEvent();
549 
550  cout.rdbuf(coutbuf);
551  tout.close();
552  mela.setVerbosity(bkpverbosity);
553 }
554 
555 
556 void testME_Dec_MCFM_Ping(int flavor=2, int useMothers=0, bool useConstants=false, shared_ptr<Mela> melaptr=nullptr){
557  ofstream tout(TString("testME_Dec_MCFM_Ping_")+long(flavor)+"_"+long(useMothers)+"_"+long(useConstants)+".out");
558  streambuf* coutbuf = cout.rdbuf();
559  cout.rdbuf(tout.rdbuf());
560 
561  int erg_tev=13;
562  float mPOLE=125.;
563  float wPOLE=4.07e-3;
564 
565  TVar::VerbosityLevel verbosity = TVar::DEBUG;
566  if (!melaptr) {
567  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
568  }
569  Mela& mela = *melaptr;
570  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
571  mela.setVerbosity(verbosity);
572 
573  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
574  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
575  if (verbosity>=TVar::DEBUG) cout << "Mela candidate decay mode initializing" << endl;
576  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
577  if (verbosity>=TVar::DEBUG) cout << "Mela candidate decay mode initialized" << endl;
578 
579  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
580  /*
581  const int nEntries = 3;
582  double l1_array[nEntries][4] = {
583  {1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332},
584  {238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188},
585  {101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749}
586  };
587  double l2_array[nEntries][4] = {
588  {22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371},
589  {101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268},
590  {24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428}
591  };
592  double l3_array[nEntries][4] = {
593  {1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620},
594  {317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883},
595  {180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915}
596  };
597  double l4_array[nEntries][4] = {
598  {471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354},
599  {95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792},
600  {49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688}
601  };
602  */
603  const int nEntries = 6;
604  double l1_array[nEntries][4] ={
605  { 51.374202, 25.924766, 12.290178, 42.616376 },
606  { 51.374202, 25.924766, 12.290178, 42.616376 },
607  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
608  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
609  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
610  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
611  };
612  double l2_array[nEntries][4] ={
613  { 271.875752, 70.427173, -11.138146, 261.769598 },
614  { 21.481452, 9.489680, -9.336587, 16.858699 },
615  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
616  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
617  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
618  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
619  };
620  double l3_array[nEntries][4] ={
621  { 75.823478, -16.640412, 23.246999, 70.227220 },
622  { 75.823478, -16.640412, 23.246999, 70.227220 },
623  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
624  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
625  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
626  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
627  };
628  double l4_array[nEntries][4] ={
629  { 21.481452, 9.489680, -9.336587, 16.858699 },
630  { 271.875752, 70.427173, -11.138146, 261.769598 },
631  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
632  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
633  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
634  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
635  };
636 
637  for (int ev = 2; ev < 3; ev++){
638  if (flavor == 2){
639  GenLep1Id=13;
640  GenLep2Id=-13;
641  GenLep3Id=11;
642  GenLep4Id=-11;
643  }
644  else if (flavor == 1){
645  GenLep1Id=11;
646  GenLep2Id=-11;
647  GenLep3Id=11;
648  GenLep4Id=-11;
649  }
650  else if (flavor == 0){
651  GenLep1Id=13;
652  GenLep2Id=-13;
653  GenLep3Id=13;
654  GenLep4Id=-13;
655  }
656  else if (flavor == 3){
657  GenLep1Id=14;
658  GenLep2Id=-14;
659  GenLep3Id=13;
660  GenLep4Id=-13;
661  }
662  else if (flavor == 4){
663  GenLep1Id=0;
664  GenLep2Id=-0;
665  GenLep3Id=1;
666  GenLep4Id=-1;
667  }
668  else if (flavor == 5){
669  GenLep1Id=1;
670  GenLep2Id=-1;
671  GenLep3Id=2;
672  GenLep4Id=-2;
673  }
674 
675  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
676  int idOrdered_WW[4] ={ 11, -12, -11, 12 };
677  TLorentzVector pOrdered[4];
678  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
679  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
680  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
681  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
682  SimpleParticleCollection_t daughters_WW;
683  for (unsigned int idau=0; idau<4; idau++) daughters_WW.push_back(SimpleParticle_t(idOrdered_WW[idau], pOrdered[idau]));
684  SimpleParticleCollection_t daughters_WWasZZ;
685  for (unsigned int iv=0; iv<2; iv++){ for (int ivd=0; ivd<2; ivd++) daughters_WWasZZ.push_back(SimpleParticle_t(idOrdered_WW[iv+2*ivd], pOrdered[iv+2*ivd])); }
686  SimpleParticleCollection_t daughters_ZZ;
687  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
688 
689  TLorentzVector pOrdered_ZG[3];
690  pOrdered_ZG[0]=pOrdered[0];
691  pOrdered_ZG[1]=pOrdered[1];
692  pOrdered_ZG[2]=pOrdered[2]+pOrdered[3];
693  SimpleParticleCollection_t daughters_ZG;
694  for (unsigned int idau=0; idau<2; idau++) daughters_ZG.push_back(SimpleParticle_t(idOrdered[idau], pOrdered_ZG[idau]));
695  for (unsigned int idau=2; idau<3; idau++) daughters_ZG.push_back(SimpleParticle_t(22, pOrdered_ZG[idau]));
696 
697  // Some gymnastics to get pseudo-mothers for these events
698  TLorentzVector pTotal = pOrdered[0]+pOrdered[1]+pOrdered[2]+pOrdered[3];
699  TLorentzVector pTotal_dummy=pTotal;
700  TLorentzVector pTotal_perp(pTotal.X(), pTotal.Y(), 0, pTotal.T());
701  pTotal_dummy.Boost(-pTotal_perp.BoostVector());
702  TLorentzVector pMothers[2];
703  pMothers[0].SetXYZT(0, 0, (pTotal_dummy.Z()+pTotal_dummy.T())/2., (pTotal_dummy.Z()+pTotal_dummy.T())/2.);
704  pMothers[1].SetXYZT(0, 0, (pTotal_dummy.Z()-pTotal_dummy.T())/2., (-pTotal_dummy.Z()+pTotal_dummy.T())/2.);
705  for (int im=0; im<2; im++) pMothers[im].Boost(pTotal_perp.BoostVector());
706  SimpleParticleCollection_t mothers_QQB;
707  for (unsigned int im=0; im<2; im++) mothers_QQB.push_back(SimpleParticle_t(1-2*im, pMothers[im]));
708  SimpleParticleCollection_t mothers_GG;
709  for (unsigned int im=0; im<2; im++) mothers_GG.push_back(SimpleParticle_t(21, pMothers[im]));
710  SimpleParticleCollection_t* mothersPtr=0;
711  if (useMothers==1) mothersPtr=&mothers_GG;
712  else if (useMothers==2) mothersPtr=&mothers_QQB;
713 
714  TLorentzVector pOrdered_GG[3];
715  pOrdered_GG[0]=pOrdered[0]+pOrdered[1];
716  pOrdered_GG[1]=pOrdered[2]+pOrdered[3];
717  SimpleParticleCollection_t daughters_GG;
718  for (unsigned int idau=0; idau<2; idau++) daughters_GG.push_back(SimpleParticle_t(22, pOrdered_GG[idau]));
719 
720  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
721  mela.setInputEvent(&daughters_WW, (SimpleParticleCollection_t*)0, mothersPtr, (mothersPtr!=0));
722  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
723  mela.setInputEvent(&daughters_WWasZZ, (SimpleParticleCollection_t*)0, mothersPtr, (mothersPtr!=0));
724  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
725  mela.setInputEvent(&daughters_ZZ, (SimpleParticleCollection_t*)0, mothersPtr, (mothersPtr!=0));
726  mela.setInputEvent(&daughters_ZG, (SimpleParticleCollection_t*)0, mothersPtr, (mothersPtr!=0));
727  mela.setCandidateDecayMode(TVar::CandidateDecay_GG);
728  mela.setInputEvent(&daughters_GG, (SimpleParticleCollection_t*)0, mothersPtr, (mothersPtr!=0));
729 
730  int cindex;
731 
732  /***** WW *****/
733  cindex=0;
734  mela.setCurrentCandidateFromIndex(cindex);
735 
736  float pVAMCFM_qqWW_bkg;
737  mela.setProcess(TVar::bkgWW, TVar::MCFM, TVar::ZZQQB);
738  mela.computeP(pVAMCFM_qqWW_bkg, useConstants);
739  cout << "pVAMCFM_qqWW_bkg: " << pVAMCFM_qqWW_bkg << '\n' << endl;
740 
741  float pVAMCFM_ggVV_total;
743  mela.computeP(pVAMCFM_ggVV_total, useConstants);
744  cout << "pVAMCFM_ggVV_total: " << pVAMCFM_ggVV_total << '\n' << endl;
745  float pVAMCFM_ggVV_bkg;
746  mela.setProcess(TVar::bkgWWZZ, TVar::MCFM, TVar::ZZGG);
747  mela.computeP(pVAMCFM_ggVV_bkg, useConstants);
748  cout << "pVAMCFM_ggVV_bkg: " << pVAMCFM_ggVV_bkg << '\n' << endl;
749  float pVAMCFM_ggVV_sig;
751  mela.computeP(pVAMCFM_ggVV_sig, useConstants);
752  cout << "pVAMCFM_ggVV_sig: " << pVAMCFM_ggVV_sig << '\n' << endl;
753 
754  float pVAMCFM_ggWW_total;
756  mela.computeP(pVAMCFM_ggWW_total, useConstants);
757  cout << "pVAMCFM_ggWW_total: " << pVAMCFM_ggWW_total << '\n' << endl;
758  float pVAMCFM_ggWW_bkg;
759  mela.setProcess(TVar::bkgWW, TVar::MCFM, TVar::ZZGG);
760  mela.computeP(pVAMCFM_ggWW_bkg, useConstants);
761  cout << "pVAMCFM_ggWW_bkg: " << pVAMCFM_ggWW_bkg << '\n' << endl;
762  float pVAMCFM_ggWW_sig;
764  mela.computeP(pVAMCFM_ggWW_sig, useConstants);
765  cout << "pVAMCFM_ggWW_sig: " << pVAMCFM_ggWW_sig << '\n' << endl;
766 
767  float pVAMCFM_ggWW_sig_selfDg1;
769  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
770  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
771  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
772  mela.setMelaHiggsWidth(wPOLE);
773  mela.setMelaLeptonInterference(TVar::InterfOn);
774  mela.computeP(pVAMCFM_ggWW_sig_selfDg1, useConstants);
775  cout << "pVAMCFM_ggWW_sig_selfDg1: " << pVAMCFM_ggWW_sig_selfDg1 << '\n' << endl;
776 
777  float pVAMCFM_ggWW_sig_selfDg2;
779  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
780  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
781  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
782  mela.setMelaHiggsWidth(wPOLE);
783  mela.setMelaLeptonInterference(TVar::InterfOn);
784  mela.computeP(pVAMCFM_ggWW_sig_selfDg2, useConstants);
785  cout << "pVAMCFM_ggWW_sig_selfDg2: " << pVAMCFM_ggWW_sig_selfDg2 << '\n' << endl;
786 
787  float pVAMCFM_ggWW_sig_selfDg4;
789  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
790  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
791  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
792  mela.setMelaHiggsWidth(wPOLE);
793  mela.setMelaLeptonInterference(TVar::InterfOn);
794  mela.computeP(pVAMCFM_ggWW_sig_selfDg4, useConstants);
795  cout << "pVAMCFM_ggWW_sig_selfDg4: " << pVAMCFM_ggWW_sig_selfDg4 << '\n' << endl;
796 
797  float pVAMCFM_ggWW_sig_selfDg1g2;
799  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
800  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
801  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
802  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
803  mela.setMelaHiggsWidth(wPOLE);
804  mela.setMelaLeptonInterference(TVar::InterfOn);
805  mela.computeP(pVAMCFM_ggWW_sig_selfDg1g2, useConstants);
806  cout << "pVAMCFM_ggWW_sig_selfDg1g2: " << pVAMCFM_ggWW_sig_selfDg1g2 << '\n' << endl;
807 
808  float pVAMCFM_ggWW_sig_selfDg1g4;
810  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
811  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
812  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
813  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
814  mela.setMelaHiggsWidth(wPOLE);
815  mela.setMelaLeptonInterference(TVar::InterfOn);
816  mela.computeP(pVAMCFM_ggWW_sig_selfDg1g4, useConstants);
817  cout << "pVAMCFM_ggWW_sig_selfDg1g4: " << pVAMCFM_ggWW_sig_selfDg1g4 << '\n' << endl;
818 
819  float pVAMCFM_ggWW_sig_selfDg1g2im;
821  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
822  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
823  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
824  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.0;
825  mela.setMelaHiggsWidth(wPOLE);
826  mela.setMelaLeptonInterference(TVar::InterfOn);
827  mela.computeP(pVAMCFM_ggWW_sig_selfDg1g2im, useConstants);
828  cout << "pVAMCFM_ggWW_sig_selfDg1g2im: " << pVAMCFM_ggWW_sig_selfDg1g2im << '\n' << endl;
829 
830  float pVAMCFM_ggWW_sig_selfDg1g4im;
832  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
833  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
834  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
835  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1.0;
836  mela.setMelaHiggsWidth(wPOLE);
837  mela.setMelaLeptonInterference(TVar::InterfOn);
838  mela.computeP(pVAMCFM_ggWW_sig_selfDg1g4im, useConstants);
839  cout << "pVAMCFM_ggWW_sig_selfDg1g4im: " << pVAMCFM_ggWW_sig_selfDg1g4im << '\n' << endl;
840 
841  float pVAMCFM_ggWW_sig_largemt4_kappat4;
843  mela.resetMass(1e7, 8); // Already 1e5, but just to make sure
844  mela.selfDHt4t4coupl[0][gHIGGS_KAPPA][0]=1.0;
845  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
846  mela.setMelaHiggsWidth(wPOLE);
847  mela.setMelaLeptonInterference(TVar::InterfOn);
848  mela.computeP(pVAMCFM_ggWW_sig_largemt4_kappat4, useConstants);
849  cout << "pVAMCFM_ggWW_sig_largemt4_kappat4: " << pVAMCFM_ggWW_sig_largemt4_kappat4 << '\n' << endl;
850 
851  float pVAMCFM_ggWW_sig_largemt4_kappatildet4;
853  mela.resetMass(1e7, 8); // Already 1e5, but just to make sure
854  mela.selfDHt4t4coupl[0][gHIGGS_KAPPA_TILDE][0]=1.0;
855  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
856  mela.setMelaHiggsWidth(wPOLE);
857  mela.setMelaLeptonInterference(TVar::InterfOn);
858  mela.computeP(pVAMCFM_ggWW_sig_largemt4_kappatildet4, useConstants);
859  cout << "pVAMCFM_ggWW_sig_largemt4_kappatildet4: " << pVAMCFM_ggWW_sig_largemt4_kappatildet4 << '\n' << endl;
860 
861  float pVAMCFM_ggWW_sig_ghg2_gen4;
863  mela.selfDHg4g4coupl[0][gHIGGS_GG_2][0]=1.0;
864  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
865  mela.setMelaHiggsWidth(wPOLE);
866  mela.setMelaLeptonInterference(TVar::InterfOn);
867  mela.computeP(pVAMCFM_ggWW_sig_ghg2_gen4, useConstants);
868  cout << "pVAMCFM_ggWW_sig_ghg2_gen4: " << pVAMCFM_ggWW_sig_ghg2_gen4 << '\n' << endl;
869 
870  float pVAMCFM_ggWW_sig_ghg4_gen4;
872  mela.selfDHg4g4coupl[0][gHIGGS_GG_4][0]=1.0;
873  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
874  mela.setMelaHiggsWidth(wPOLE);
875  mela.setMelaLeptonInterference(TVar::InterfOn);
876  mela.computeP(pVAMCFM_ggWW_sig_ghg4_gen4, useConstants);
877  cout << "pVAMCFM_ggWW_sig_ghg4_gen4: " << pVAMCFM_ggWW_sig_ghg4_gen4 << '\n' << endl;
878 
879  float pVAMCFM_ggWW_sig_ghg2ghg4_gen4;
881  mela.selfDHg4g4coupl[0][gHIGGS_GG_2][0]=1.0;
882  mela.selfDHg4g4coupl[0][gHIGGS_GG_4][0]=1.0;
883  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
884  mela.setMelaHiggsWidth(wPOLE);
885  mela.setMelaLeptonInterference(TVar::InterfOn);
886  mela.computeP(pVAMCFM_ggWW_sig_ghg2ghg4_gen4, useConstants);
887  cout << "pVAMCFM_ggWW_sig_ghg2ghg4_gen4: " << pVAMCFM_ggWW_sig_ghg2ghg4_gen4 << '\n' << endl;
888 
889  float pVAMCFM_ggWW_sig_ghg2ghg4im_gen4;
891  mela.selfDHg4g4coupl[0][gHIGGS_GG_2][0]=1.0;
892  mela.selfDHg4g4coupl[0][gHIGGS_GG_4][1]=1.0;
893  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
894  mela.setMelaHiggsWidth(wPOLE);
895  mela.setMelaLeptonInterference(TVar::InterfOn);
896  mela.computeP(pVAMCFM_ggWW_sig_ghg2ghg4im_gen4, useConstants);
897  cout << "pVAMCFM_ggWW_sig_ghg2ghg4im_gen4: " << pVAMCFM_ggWW_sig_ghg2ghg4im_gen4 << '\n' << endl;
898 
899 
900  float pVAJHU_ggWW_sig_selfDg1;
902  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
903  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
904  mela.setMelaHiggsWidth(wPOLE);
905  mela.setMelaLeptonInterference(TVar::InterfOn);
906  mela.computeP(pVAJHU_ggWW_sig_selfDg1, useConstants);
907  cout << "pVAJHU_ggWW_sig_selfDg1: " << pVAJHU_ggWW_sig_selfDg1 << '\n' << endl;
908 
909  float pVAJHU_ggWW_sig_selfDg2;
911  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
912  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
913  mela.setMelaHiggsWidth(wPOLE);
914  mela.setMelaLeptonInterference(TVar::InterfOn);
915  mela.computeP(pVAJHU_ggWW_sig_selfDg2, useConstants);
916  cout << "pVAJHU_ggWW_sig_selfDg2: " << pVAJHU_ggWW_sig_selfDg2 << '\n' << endl;
917 
918  float pVAJHU_ggWW_sig_selfDg4;
920  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
921  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
922  mela.setMelaHiggsWidth(wPOLE);
923  mela.setMelaLeptonInterference(TVar::InterfOn);
924  mela.computeP(pVAJHU_ggWW_sig_selfDg4, useConstants);
925  cout << "pVAJHU_ggWW_sig_selfDg4: " << pVAJHU_ggWW_sig_selfDg4 << '\n' << endl;
926 
927  float pVAJHU_ggWW_sig_selfDg1g2;
929  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
930  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
931  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
932  mela.setMelaHiggsWidth(wPOLE);
933  mela.setMelaLeptonInterference(TVar::InterfOn);
934  mela.computeP(pVAJHU_ggWW_sig_selfDg1g2, useConstants);
935  cout << "pVAJHU_ggWW_sig_selfDg1g2: " << pVAJHU_ggWW_sig_selfDg1g2 << '\n' << endl;
936 
937  float pVAJHU_ggWW_sig_selfDg1g4;
939  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
940  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
941  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
942  mela.setMelaHiggsWidth(wPOLE);
943  mela.setMelaLeptonInterference(TVar::InterfOn);
944  mela.computeP(pVAJHU_ggWW_sig_selfDg1g4, useConstants);
945  cout << "pVAJHU_ggWW_sig_selfDg1g4: " << pVAJHU_ggWW_sig_selfDg1g4 << '\n' << endl;
946 
947  float pVAJHU_ggWW_sig_selfDg1g2im;
949  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
950  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
951  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.0;
952  mela.setMelaHiggsWidth(wPOLE);
953  mela.setMelaLeptonInterference(TVar::InterfOn);
954  mela.computeP(pVAJHU_ggWW_sig_selfDg1g2im, useConstants);
955  cout << "pVAJHU_ggWW_sig_selfDg1g2im: " << pVAJHU_ggWW_sig_selfDg1g2im << '\n' << endl;
956 
957  float pVAJHU_ggWW_sig_selfDg1g4im;
959  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
960  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
961  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1.0;
962  mela.setMelaHiggsWidth(wPOLE);
963  mela.setMelaLeptonInterference(TVar::InterfOn);
964  mela.computeP(pVAJHU_ggWW_sig_selfDg1g4im, useConstants);
965  cout << "pVAJHU_ggWW_sig_selfDg1g4im: " << pVAJHU_ggWW_sig_selfDg1g4im << '\n' << endl;
966 
967  float pVAJHU_ggWW_sig_ghg4;
969  mela.selfDHggcoupl[0][gHIGGS_GG_4][0]=1.0;
970  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
971  mela.setMelaHiggsWidth(wPOLE);
972  mela.setMelaLeptonInterference(TVar::InterfOn);
973  mela.computeP(pVAJHU_ggWW_sig_ghg4, useConstants);
974  cout << "pVAJHU_ggWW_sig_ghg4: " << pVAJHU_ggWW_sig_ghg4 << '\n' << endl;
975 
976  float pVAJHU_ggWW_sig_ghg2ghg4;
978  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
979  mela.selfDHggcoupl[0][gHIGGS_GG_4][0]=1.0;
980  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
981  mela.setMelaHiggsWidth(wPOLE);
982  mela.setMelaLeptonInterference(TVar::InterfOn);
983  mela.computeP(pVAJHU_ggWW_sig_ghg2ghg4, useConstants);
984  cout << "pVAJHU_ggWW_sig_ghg2ghg4: " << pVAJHU_ggWW_sig_ghg2ghg4 << '\n' << endl;
985 
986  float pVAJHU_ggWW_sig_ghg2ghg4im;
988  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
989  mela.selfDHggcoupl[0][gHIGGS_GG_4][1]=1.0;
990  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
991  mela.setMelaHiggsWidth(wPOLE);
992  mela.setMelaLeptonInterference(TVar::InterfOn);
993  mela.computeP(pVAJHU_ggWW_sig_ghg2ghg4im, useConstants);
994  cout << "pVAJHU_ggWW_sig_ghg2ghg4im: " << pVAJHU_ggWW_sig_ghg2ghg4im << '\n' << endl;
995 
996  cout << "MCFM vs JHUGen Ratio comparison:" << endl;
997  cout << "ggWW_sig_selfDg2: " << pVAMCFM_ggWW_sig_selfDg2/pVAMCFM_ggWW_sig_selfDg1 << '\t' << pVAJHU_ggWW_sig_selfDg2/pVAJHU_ggWW_sig_selfDg1 << endl;
998  cout << "ggWW_sig_selfDg1g2: " << pVAMCFM_ggWW_sig_selfDg1g2/pVAMCFM_ggWW_sig_selfDg1 << '\t' << pVAJHU_ggWW_sig_selfDg1g2/pVAJHU_ggWW_sig_selfDg1 << endl;
999  cout << "ggWW_sig_selfDg1g2im: " << pVAMCFM_ggWW_sig_selfDg1g2im/pVAMCFM_ggWW_sig_selfDg1 << '\t' << pVAJHU_ggWW_sig_selfDg1g2im/pVAJHU_ggWW_sig_selfDg1 << endl;
1000  cout << "ggWW_sig_selfDg4: " << pVAMCFM_ggWW_sig_selfDg4/pVAMCFM_ggWW_sig_selfDg1 << '\t' << pVAJHU_ggWW_sig_selfDg4/pVAJHU_ggWW_sig_selfDg1 << endl;
1001  cout << "ggWW_sig_selfDg1g4: " << pVAMCFM_ggWW_sig_selfDg1g4/pVAMCFM_ggWW_sig_selfDg1 << '\t' << pVAJHU_ggWW_sig_selfDg1g4/pVAJHU_ggWW_sig_selfDg1 << endl;
1002  cout << "ggWW_sig_selfDg1g4im: " << pVAMCFM_ggWW_sig_selfDg1g4im/pVAMCFM_ggWW_sig_selfDg1 << '\t' << pVAJHU_ggWW_sig_selfDg1g4im/pVAJHU_ggWW_sig_selfDg1 << endl;
1003  cout << "***" << endl;
1004  cout << "MCFM_ggWW_sig_largemt4_kappatildet4: " << pVAMCFM_ggWW_sig_largemt4_kappatildet4/pVAMCFM_ggWW_sig_largemt4_kappat4 << endl;
1005  cout << "MCFM_ggWW_sig_ghg2_gen4: " << pVAMCFM_ggWW_sig_ghg2_gen4/pVAMCFM_ggWW_sig_largemt4_kappat4 << endl;
1006  cout << "ggWW_sig_ghg4_gen4: " << pVAMCFM_ggWW_sig_ghg4_gen4/pVAMCFM_ggWW_sig_ghg2_gen4 << '\t' << pVAJHU_ggWW_sig_ghg4/pVAJHU_ggWW_sig_selfDg1 << endl;
1007  cout << "ggWW_sig_ghg2ghg4_gen4: " << pVAMCFM_ggWW_sig_ghg2ghg4_gen4/pVAMCFM_ggWW_sig_ghg2_gen4 << '\t' << pVAJHU_ggWW_sig_ghg2ghg4/pVAJHU_ggWW_sig_selfDg1 << endl;
1008  cout << "ggWW_sig_ghg2ghg4im_gen4: " << pVAMCFM_ggWW_sig_ghg2ghg4im_gen4/pVAMCFM_ggWW_sig_ghg2_gen4 << '\t' << pVAJHU_ggWW_sig_ghg2ghg4im/pVAJHU_ggWW_sig_selfDg1 << endl;
1009  cout << endl;
1010 
1011  /***** WW (as ZZ) *****/
1012  cindex=1;
1013  mela.setCurrentCandidateFromIndex(cindex);
1014 
1015  float pVAMCFM_ggVV_fromZZ_total;
1017  mela.computeP(pVAMCFM_ggVV_fromZZ_total, useConstants);
1018  cout << "pVAMCFM_ggVV_fromZZ_total: " << pVAMCFM_ggVV_fromZZ_total << '\n' << endl;
1019  float pVAMCFM_ggVV_fromZZ_bkg;
1020  mela.setProcess(TVar::bkgWWZZ, TVar::MCFM, TVar::ZZGG);
1021  mela.computeP(pVAMCFM_ggVV_fromZZ_bkg, useConstants);
1022  cout << "pVAMCFM_ggVV_fromZZ_bkg: " << pVAMCFM_ggVV_fromZZ_bkg << '\n' << endl;
1023  float pVAMCFM_ggVV_fromZZ_sig;
1025  mela.computeP(pVAMCFM_ggVV_fromZZ_sig, useConstants);
1026  cout << "pVAMCFM_ggVV_fromZZ_sig: " << pVAMCFM_ggVV_fromZZ_sig << '\n' << endl;
1027 
1028  float pVAMCFM_ggZZ_total;
1030  mela.computeP(pVAMCFM_ggZZ_total, useConstants);
1031  cout << "pVAMCFM_ggZZ_total from WW as ZZ: " << pVAMCFM_ggZZ_total << '\n' << endl;
1032  float pVAMCFM_ggZZ_bkg;
1033  mela.setProcess(TVar::bkgZZ, TVar::MCFM, TVar::ZZGG);
1034  mela.computeP(pVAMCFM_ggZZ_bkg, useConstants);
1035  cout << "pVAMCFM_ggZZ_bkg from WW as ZZ: " << pVAMCFM_ggZZ_bkg << '\n' << endl;
1036  float pVAMCFM_ggWWasZZ_sig;
1037  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1038  mela.computeP(pVAMCFM_ggWWasZZ_sig, useConstants);
1039  cout << "pVAMCFM_ggWWasZZ_sig: " << pVAMCFM_ggWWasZZ_sig << '\n' << endl;
1040 
1041  float pVAMCFM_ggWWasZZ_sig_selfDg1;
1042  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1043  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1044  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1045  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1046  mela.setMelaHiggsWidth(wPOLE);
1047  mela.setMelaLeptonInterference(TVar::InterfOn);
1048  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1, useConstants);
1049  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1: " << pVAMCFM_ggWWasZZ_sig_selfDg1 << '\n' << endl;
1050 
1051  float pVAMCFM_ggWWasZZ_sig_selfDg2;
1052  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1053  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1054  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1055  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
1056  mela.setMelaHiggsWidth(wPOLE);
1057  mela.setMelaLeptonInterference(TVar::InterfOn);
1058  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg2, useConstants);
1059  cout << "pVAMCFM_ggWWasZZ_sig_selfDg2: " << pVAMCFM_ggWWasZZ_sig_selfDg2 << '\n' << endl;
1060 
1061  float pVAMCFM_ggWWasZZ_sig_selfDg4;
1062  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1063  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1064  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1065  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
1066  mela.setMelaHiggsWidth(wPOLE);
1067  mela.setMelaLeptonInterference(TVar::InterfOn);
1068  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg4, useConstants);
1069  cout << "pVAMCFM_ggWWasZZ_sig_selfDg4: " << pVAMCFM_ggWWasZZ_sig_selfDg4 << '\n' << endl;
1070 
1071  float pVAMCFM_ggWWasZZ_sig_selfDgzgs2;
1072  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1073  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1074  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1075  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1.0;
1076  mela.setMelaHiggsWidth(wPOLE);
1077  mela.setMelaLeptonInterference(TVar::InterfOn);
1078  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDgzgs2, useConstants);
1079  cout << "pVAMCFM_ggWWasZZ_sig_selfDgzgs2: " << pVAMCFM_ggWWasZZ_sig_selfDgzgs2 << '\n' << endl;
1080 
1081  float pVAMCFM_ggWWasZZ_sig_selfDgzgs4;
1082  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1083  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1084  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1085  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1.0;
1086  mela.setMelaHiggsWidth(wPOLE);
1087  mela.setMelaLeptonInterference(TVar::InterfOn);
1088  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDgzgs4, useConstants);
1089  cout << "pVAMCFM_ggWWasZZ_sig_selfDgzgs4: " << pVAMCFM_ggWWasZZ_sig_selfDgzgs4 << '\n' << endl;
1090 
1091  float pVAMCFM_ggWWasZZ_sig_selfDggsgs2;
1092  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1093  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1094  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1095  mela.selfDHzzcoupl[0][gHIGGS_AA_2][0]=1.0;
1096  mela.setMelaHiggsWidth(wPOLE);
1097  mela.setMelaLeptonInterference(TVar::InterfOn);
1098  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDggsgs2, useConstants);
1099  cout << "pVAMCFM_ggWWasZZ_sig_selfDggsgs2: " << pVAMCFM_ggWWasZZ_sig_selfDggsgs2 << '\n' << endl;
1100 
1101  float pVAMCFM_ggWWasZZ_sig_selfDggsgs4;
1102  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1103  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1104  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1105  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1.0;
1106  mela.setMelaHiggsWidth(wPOLE);
1107  mela.setMelaLeptonInterference(TVar::InterfOn);
1108  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDggsgs4, useConstants);
1109  cout << "pVAMCFM_ggWWasZZ_sig_selfDggsgs4: " << pVAMCFM_ggWWasZZ_sig_selfDggsgs4 << '\n' << endl;
1110 
1111  float pVAMCFM_ggWWasZZ_sig_selfDg1g2;
1112  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1113  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1114  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1115  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1116  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
1117  mela.setMelaHiggsWidth(wPOLE);
1118  mela.setMelaLeptonInterference(TVar::InterfOn);
1119  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1g2, useConstants);
1120  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1g2: " << pVAMCFM_ggWWasZZ_sig_selfDg1g2 << '\n' << endl;
1121 
1122  float pVAMCFM_ggWWasZZ_sig_selfDg1g4;
1123  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1124  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1125  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1126  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1127  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
1128  mela.setMelaHiggsWidth(wPOLE);
1129  mela.setMelaLeptonInterference(TVar::InterfOn);
1130  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1g4, useConstants);
1131  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1g4: " << pVAMCFM_ggWWasZZ_sig_selfDg1g4 << '\n' << endl;
1132 
1133  float pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2;
1134  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1135  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1136  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1137  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1138  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1.0;
1139  mela.setMelaHiggsWidth(wPOLE);
1140  mela.setMelaLeptonInterference(TVar::InterfOn);
1141  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2, useConstants);
1142  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2 << '\n' << endl;
1143 
1144  float pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4;
1145  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1146  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1147  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1148  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1149  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1.0;
1150  mela.setMelaHiggsWidth(wPOLE);
1151  mela.setMelaLeptonInterference(TVar::InterfOn);
1152  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4, useConstants);
1153  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4 << '\n' << endl;
1154 
1155  float pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2;
1156  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1157  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1158  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1159  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1160  mela.selfDHzzcoupl[0][gHIGGS_AA_2][0]=1.0;
1161  mela.setMelaHiggsWidth(wPOLE);
1162  mela.setMelaLeptonInterference(TVar::InterfOn);
1163  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2, useConstants);
1164  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2 << '\n' << endl;
1165 
1166  float pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4;
1167  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1168  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1169  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1170  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1171  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1.0;
1172  mela.setMelaHiggsWidth(wPOLE);
1173  mela.setMelaLeptonInterference(TVar::InterfOn);
1174  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4, useConstants);
1175  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4 << '\n' << endl;
1176 
1177  float pVAMCFM_ggWWasZZ_sig_selfDg1g2im;
1178  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1179  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1180  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1181  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1182  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.0;
1183  mela.setMelaHiggsWidth(wPOLE);
1184  mela.setMelaLeptonInterference(TVar::InterfOn);
1185  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1g2im, useConstants);
1186  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1g2im: " << pVAMCFM_ggWWasZZ_sig_selfDg1g2im << '\n' << endl;
1187 
1188  float pVAMCFM_ggWWasZZ_sig_selfDg1g4im;
1189  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1190  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1191  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1192  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1193  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1.0;
1194  mela.setMelaHiggsWidth(wPOLE);
1195  mela.setMelaLeptonInterference(TVar::InterfOn);
1196  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1g4im, useConstants);
1197  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1g4im: " << pVAMCFM_ggWWasZZ_sig_selfDg1g4im << '\n' << endl;
1198 
1199  float pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2im;
1200  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1201  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1202  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1203  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1204  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][1]=1.0;
1205  mela.setMelaHiggsWidth(wPOLE);
1206  mela.setMelaLeptonInterference(TVar::InterfOn);
1207  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2im, useConstants);
1208  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2im: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2im << '\n' << endl;
1209 
1210  float pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4im;
1211  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1212  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1213  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1214  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1215  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][1]=1.0;
1216  mela.setMelaHiggsWidth(wPOLE);
1217  mela.setMelaLeptonInterference(TVar::InterfOn);
1218  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4im, useConstants);
1219  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4im: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4im << '\n' << endl;
1220 
1221  float pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2im;
1222  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1223  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1224  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1225  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1226  mela.selfDHzzcoupl[0][gHIGGS_AA_2][1]=1.0;
1227  mela.setMelaHiggsWidth(wPOLE);
1228  mela.setMelaLeptonInterference(TVar::InterfOn);
1229  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2im, useConstants);
1230  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2im: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2im << '\n' << endl;
1231 
1232  float pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4im;
1233  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1234  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1235  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1236  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1237  mela.selfDHzzcoupl[0][gHIGGS_AA_4][1]=1.0;
1238  mela.setMelaHiggsWidth(wPOLE);
1239  mela.setMelaLeptonInterference(TVar::InterfOn);
1240  mela.computeP(pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4im, useConstants);
1241  cout << "pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4im: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4im << '\n' << endl;
1242 
1243  float pVAMCFM_ggWWasZZ_sig_largemt4_kappat4;
1244  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1245  mela.resetMass(1e7, 8); // Already 1e5, but just to make sure
1246  mela.selfDHt4t4coupl[0][gHIGGS_KAPPA][0]=1.0;
1247  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1248  mela.setMelaHiggsWidth(wPOLE);
1249  mela.setMelaLeptonInterference(TVar::InterfOn);
1250  mela.computeP(pVAMCFM_ggWWasZZ_sig_largemt4_kappat4, useConstants);
1251  cout << "pVAMCFM_ggWWasZZ_sig_largemt4_kappat4: " << pVAMCFM_ggWWasZZ_sig_largemt4_kappat4 << '\n' << endl;
1252 
1253  float pVAMCFM_ggWWasZZ_sig_largemt4_kappatildet4;
1254  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1255  mela.resetMass(1e7, 8); // Already 1e5, but just to make sure
1256  mela.selfDHt4t4coupl[0][gHIGGS_KAPPA_TILDE][0]=1.0;
1257  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1258  mela.setMelaHiggsWidth(wPOLE);
1259  mela.setMelaLeptonInterference(TVar::InterfOn);
1260  mela.computeP(pVAMCFM_ggWWasZZ_sig_largemt4_kappatildet4, useConstants);
1261  cout << "pVAMCFM_ggWWasZZ_sig_largemt4_kappatildet4: " << pVAMCFM_ggWWasZZ_sig_largemt4_kappatildet4 << '\n' << endl;
1262 
1263  float pVAMCFM_ggWWasZZ_sig_ghg2_gen4;
1264  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1265  mela.selfDHg4g4coupl[0][gHIGGS_GG_2][0]=1.0;
1266  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1267  mela.setMelaHiggsWidth(wPOLE);
1268  mela.setMelaLeptonInterference(TVar::InterfOn);
1269  mela.computeP(pVAMCFM_ggWWasZZ_sig_ghg2_gen4, useConstants);
1270  cout << "pVAMCFM_ggWWasZZ_sig_ghg2_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg2_gen4 << '\n' << endl;
1271 
1272  float pVAMCFM_ggWWasZZ_sig_ghg4_gen4;
1273  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1274  mela.selfDHg4g4coupl[0][gHIGGS_GG_4][0]=1.0;
1275  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1276  mela.setMelaHiggsWidth(wPOLE);
1277  mela.setMelaLeptonInterference(TVar::InterfOn);
1278  mela.computeP(pVAMCFM_ggWWasZZ_sig_ghg4_gen4, useConstants);
1279  cout << "pVAMCFM_ggWWasZZ_sig_ghg4_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg4_gen4 << '\n' << endl;
1280 
1281  float pVAMCFM_ggWWasZZ_sig_ghg2ghg4_gen4;
1282  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1283  mela.selfDHg4g4coupl[0][gHIGGS_GG_2][0]=1.0;
1284  mela.selfDHg4g4coupl[0][gHIGGS_GG_4][0]=1.0;
1285  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1286  mela.setMelaHiggsWidth(wPOLE);
1287  mela.setMelaLeptonInterference(TVar::InterfOn);
1288  mela.computeP(pVAMCFM_ggWWasZZ_sig_ghg2ghg4_gen4, useConstants);
1289  cout << "pVAMCFM_ggWWasZZ_sig_ghg2ghg4_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg2ghg4_gen4 << '\n' << endl;
1290 
1291  float pVAMCFM_ggWWasZZ_sig_ghg2ghg4im_gen4;
1292  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1293  mela.selfDHg4g4coupl[0][gHIGGS_GG_2][0]=1.0;
1294  mela.selfDHg4g4coupl[0][gHIGGS_GG_4][1]=1.0;
1295  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1296  mela.setMelaHiggsWidth(wPOLE);
1297  mela.setMelaLeptonInterference(TVar::InterfOn);
1298  mela.computeP(pVAMCFM_ggWWasZZ_sig_ghg2ghg4im_gen4, useConstants);
1299  cout << "pVAMCFM_ggWWasZZ_sig_ghg2ghg4im_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg2ghg4im_gen4 << '\n' << endl;
1300 
1301 
1302  float pVAJHU_ggWWasZZ_sig_selfDg1;
1304  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1305  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1306  mela.setMelaHiggsWidth(wPOLE);
1307  mela.setMelaLeptonInterference(TVar::InterfOn);
1308  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1, useConstants);
1309  cout << "pVAJHU_ggWWasZZ_sig_selfDg1: " << pVAJHU_ggWWasZZ_sig_selfDg1 << '\n' << endl;
1310 
1311  float pVAJHU_ggWWasZZ_sig_selfDg2;
1313  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1314  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
1315  mela.setMelaHiggsWidth(wPOLE);
1316  mela.setMelaLeptonInterference(TVar::InterfOn);
1317  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg2, useConstants);
1318  cout << "pVAJHU_ggWWasZZ_sig_selfDg2: " << pVAJHU_ggWWasZZ_sig_selfDg2 << '\n' << endl;
1319 
1320  float pVAJHU_ggWWasZZ_sig_selfDg4;
1322  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1323  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
1324  mela.setMelaHiggsWidth(wPOLE);
1325  mela.setMelaLeptonInterference(TVar::InterfOn);
1326  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg4, useConstants);
1327  cout << "pVAJHU_ggWWasZZ_sig_selfDg4: " << pVAJHU_ggWWasZZ_sig_selfDg4 << '\n' << endl;
1328 
1329  float pVAJHU_ggWWasZZ_sig_selfDgzgs2;
1331  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1332  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1.0;
1333  mela.setMelaHiggsWidth(wPOLE);
1334  mela.setMelaLeptonInterference(TVar::InterfOn);
1335  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDgzgs2, useConstants);
1336  cout << "pVAJHU_ggWWasZZ_sig_selfDgzgs2: " << pVAJHU_ggWWasZZ_sig_selfDgzgs2 << '\n' << endl;
1337 
1338  float pVAJHU_ggWWasZZ_sig_selfDgzgs4;
1340  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1341  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1.0;
1342  mela.setMelaHiggsWidth(wPOLE);
1343  mela.setMelaLeptonInterference(TVar::InterfOn);
1344  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDgzgs4, useConstants);
1345  cout << "pVAJHU_ggWWasZZ_sig_selfDgzgs4: " << pVAJHU_ggWWasZZ_sig_selfDgzgs4 << '\n' << endl;
1346 
1347  float pVAJHU_ggWWasZZ_sig_selfDggsgs2;
1349  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1350  mela.selfDHzzcoupl[0][gHIGGS_AA_2][0]=1.0;
1351  mela.setMelaHiggsWidth(wPOLE);
1352  mela.setMelaLeptonInterference(TVar::InterfOn);
1353  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDggsgs2, useConstants);
1354  cout << "pVAJHU_ggWWasZZ_sig_selfDggsgs2: " << pVAJHU_ggWWasZZ_sig_selfDggsgs2 << '\n' << endl;
1355 
1356  float pVAJHU_ggWWasZZ_sig_selfDggsgs4;
1358  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1359  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1.0;
1360  mela.setMelaHiggsWidth(wPOLE);
1361  mela.setMelaLeptonInterference(TVar::InterfOn);
1362  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDggsgs4, useConstants);
1363  cout << "pVAJHU_ggWWasZZ_sig_selfDggsgs4: " << pVAJHU_ggWWasZZ_sig_selfDggsgs4 << '\n' << endl;
1364 
1365  float pVAJHU_ggWWasZZ_sig_selfDg1g2;
1367  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1368  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1369  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.0;
1370  mela.setMelaHiggsWidth(wPOLE);
1371  mela.setMelaLeptonInterference(TVar::InterfOn);
1372  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1g2, useConstants);
1373  cout << "pVAJHU_ggWWasZZ_sig_selfDg1g2: " << pVAJHU_ggWWasZZ_sig_selfDg1g2 << '\n' << endl;
1374 
1375  float pVAJHU_ggWWasZZ_sig_selfDg1g4;
1377  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1378  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1379  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.0;
1380  mela.setMelaHiggsWidth(wPOLE);
1381  mela.setMelaLeptonInterference(TVar::InterfOn);
1382  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1g4, useConstants);
1383  cout << "pVAJHU_ggWWasZZ_sig_selfDg1g4: " << pVAJHU_ggWWasZZ_sig_selfDg1g4 << '\n' << endl;
1384 
1385  float pVAJHU_ggWWasZZ_sig_selfDg1gzgs2;
1387  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1388  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1389  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1.0;
1390  mela.setMelaHiggsWidth(wPOLE);
1391  mela.setMelaLeptonInterference(TVar::InterfOn);
1392  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1gzgs2, useConstants);
1393  cout << "pVAJHU_ggWWasZZ_sig_selfDg1gzgs2: " << pVAJHU_ggWWasZZ_sig_selfDg1gzgs2 << '\n' << endl;
1394 
1395  float pVAJHU_ggWWasZZ_sig_selfDg1gzgs4;
1397  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1398  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1399  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1.0;
1400  mela.setMelaHiggsWidth(wPOLE);
1401  mela.setMelaLeptonInterference(TVar::InterfOn);
1402  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1gzgs4, useConstants);
1403  cout << "pVAJHU_ggWWasZZ_sig_selfDg1gzgs4: " << pVAJHU_ggWWasZZ_sig_selfDg1gzgs4 << '\n' << endl;
1404 
1405  float pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2;
1407  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1408  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1409  mela.selfDHzzcoupl[0][gHIGGS_AA_2][0]=1.0;
1410  mela.setMelaHiggsWidth(wPOLE);
1411  mela.setMelaLeptonInterference(TVar::InterfOn);
1412  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2, useConstants);
1413  cout << "pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2: " << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2 << '\n' << endl;
1414 
1415  float pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4;
1417  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1418  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1419  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1.0;
1420  mela.setMelaHiggsWidth(wPOLE);
1421  mela.setMelaLeptonInterference(TVar::InterfOn);
1422  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4, useConstants);
1423  cout << "pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4: " << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4 << '\n' << endl;
1424 
1425  float pVAJHU_ggWWasZZ_sig_selfDg1g2im;
1427  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1428  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1429  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.0;
1430  mela.setMelaHiggsWidth(wPOLE);
1431  mela.setMelaLeptonInterference(TVar::InterfOn);
1432  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1g2im, useConstants);
1433  cout << "pVAJHU_ggWWasZZ_sig_selfDg1g2im: " << pVAJHU_ggWWasZZ_sig_selfDg1g2im << '\n' << endl;
1434 
1435  float pVAJHU_ggWWasZZ_sig_selfDg1g4im;
1437  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1438  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1439  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1.0;
1440  mela.setMelaHiggsWidth(wPOLE);
1441  mela.setMelaLeptonInterference(TVar::InterfOn);
1442  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1g4im, useConstants);
1443  cout << "pVAJHU_ggWWasZZ_sig_selfDg1g4im: " << pVAJHU_ggWWasZZ_sig_selfDg1g4im << '\n' << endl;
1444 
1445  float pVAJHU_ggWWasZZ_sig_selfDg1gzgs2im;
1447  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1448  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1449  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][1]=1.0;
1450  mela.setMelaHiggsWidth(wPOLE);
1451  mela.setMelaLeptonInterference(TVar::InterfOn);
1452  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1gzgs2im, useConstants);
1453  cout << "pVAJHU_ggWWasZZ_sig_selfDg1gzgs2im: " << pVAJHU_ggWWasZZ_sig_selfDg1gzgs2im << '\n' << endl;
1454 
1455  float pVAJHU_ggWWasZZ_sig_selfDg1gzgs4im;
1457  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1458  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1459  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][1]=1.0;
1460  mela.setMelaHiggsWidth(wPOLE);
1461  mela.setMelaLeptonInterference(TVar::InterfOn);
1462  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1gzgs4im, useConstants);
1463  cout << "pVAJHU_ggWWasZZ_sig_selfDg1gzgs4im: " << pVAJHU_ggWWasZZ_sig_selfDg1gzgs4im << '\n' << endl;
1464 
1465  float pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2im;
1467  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1468  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1469  mela.selfDHzzcoupl[0][gHIGGS_AA_2][1]=1.0;
1470  mela.setMelaHiggsWidth(wPOLE);
1471  mela.setMelaLeptonInterference(TVar::InterfOn);
1472  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2im, useConstants);
1473  cout << "pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2im: " << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2im << '\n' << endl;
1474 
1475  float pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4im;
1477  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1478  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1479  mela.selfDHzzcoupl[0][gHIGGS_AA_4][1]=1.0;
1480  mela.setMelaHiggsWidth(wPOLE);
1481  mela.setMelaLeptonInterference(TVar::InterfOn);
1482  mela.computeP(pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4im, useConstants);
1483  cout << "pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4im: " << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4im << '\n' << endl;
1484 
1485  float pVAJHU_ggWWasZZ_sig_ghg4;
1487  mela.selfDHggcoupl[0][gHIGGS_GG_4][0]=1.0;
1488  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1489  mela.setMelaHiggsWidth(wPOLE);
1490  mela.setMelaLeptonInterference(TVar::InterfOn);
1491  mela.computeP(pVAJHU_ggWWasZZ_sig_ghg4, useConstants);
1492  cout << "pVAJHU_ggWWasZZ_sig_ghg4: " << pVAJHU_ggWWasZZ_sig_ghg4 << '\n' << endl;
1493 
1494  float pVAJHU_ggWWasZZ_sig_ghg2ghg4;
1496  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1497  mela.selfDHggcoupl[0][gHIGGS_GG_4][0]=1.0;
1498  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1499  mela.setMelaHiggsWidth(wPOLE);
1500  mela.setMelaLeptonInterference(TVar::InterfOn);
1501  mela.computeP(pVAJHU_ggWWasZZ_sig_ghg2ghg4, useConstants);
1502  cout << "pVAJHU_ggWWasZZ_sig_ghg2ghg4: " << pVAJHU_ggWWasZZ_sig_ghg2ghg4 << '\n' << endl;
1503 
1504  float pVAJHU_ggWWasZZ_sig_ghg2ghg4im;
1506  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1507  mela.selfDHggcoupl[0][gHIGGS_GG_4][1]=1.0;
1508  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1509  mela.setMelaHiggsWidth(wPOLE);
1510  mela.setMelaLeptonInterference(TVar::InterfOn);
1511  mela.computeP(pVAJHU_ggWWasZZ_sig_ghg2ghg4im, useConstants);
1512  cout << "pVAJHU_ggWWasZZ_sig_ghg2ghg4im: " << pVAJHU_ggWWasZZ_sig_ghg2ghg4im << '\n' << endl;
1513 
1514 
1515  cout << "MCFM vs JHUGen Ratio comparison:" << endl;
1516  cout << "ggWWasZZ_sig_selfDg2: " << pVAMCFM_ggWWasZZ_sig_selfDg2/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg2/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1517  cout << "ggWWasZZ_sig_selfDg1g2: " << pVAMCFM_ggWWasZZ_sig_selfDg1g2/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1g2/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1518  cout << "ggWWasZZ_sig_selfDg1g2im: " << pVAMCFM_ggWWasZZ_sig_selfDg1g2im/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1g2im/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1519  cout << "ggWWasZZ_sig_selfDg4: " << pVAMCFM_ggWWasZZ_sig_selfDg4/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1520  cout << "ggWWasZZ_sig_selfDg1g4: " << pVAMCFM_ggWWasZZ_sig_selfDg1g4/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1g4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1521  cout << "ggWWasZZ_sig_selfDg1g4im: " << pVAMCFM_ggWWasZZ_sig_selfDg1g4im/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1g4im/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1522  cout << "***" << endl;
1523  cout << "ggWWasZZ_sig_selfDgzgs2: " << pVAMCFM_ggWWasZZ_sig_selfDgzgs2/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDgzgs2/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1524  cout << "ggWWasZZ_sig_selfDg1gzgs2: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1gzgs2/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1525  cout << "ggWWasZZ_sig_selfDg1gzgs2im: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs2im/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1gzgs2im/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1526  cout << "ggWWasZZ_sig_selfDgzgs4: " << pVAMCFM_ggWWasZZ_sig_selfDgzgs4/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDgzgs4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1527  cout << "ggWWasZZ_sig_selfDg1gzgs4: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1gzgs4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1528  cout << "ggWWasZZ_sig_selfDg1gzgs4im: " << pVAMCFM_ggWWasZZ_sig_selfDg1gzgs4im/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1gzgs4im/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1529  cout << "***" << endl;
1530  cout << "ggWWasZZ_sig_selfDggsgs2: " << pVAMCFM_ggWWasZZ_sig_selfDggsgs2/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDggsgs2/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1531  cout << "ggWWasZZ_sig_selfDg1ggsgs2: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1532  cout << "ggWWasZZ_sig_selfDg1ggsgs2im: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs2im/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs2im/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1533  cout << "ggWWasZZ_sig_selfDggsgs4: " << pVAMCFM_ggWWasZZ_sig_selfDggsgs4/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDggsgs4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1534  cout << "ggWWasZZ_sig_selfDg1ggsgs4: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1535  cout << "ggWWasZZ_sig_selfDg1ggsgs4im: " << pVAMCFM_ggWWasZZ_sig_selfDg1ggsgs4im/pVAMCFM_ggWWasZZ_sig_selfDg1 << '\t' << pVAJHU_ggWWasZZ_sig_selfDg1ggsgs4im/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1536  cout << "***" << endl;
1537  cout << "MCFM_ggWWasZZ_sig_largemt4_kappatildet4: " << pVAMCFM_ggWWasZZ_sig_largemt4_kappatildet4/pVAMCFM_ggWWasZZ_sig_largemt4_kappat4 << endl;
1538  cout << "MCFM_ggWWasZZ_sig_ghg2_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg2_gen4/pVAMCFM_ggWWasZZ_sig_largemt4_kappat4 << endl;
1539  cout << "ggWWasZZ_sig_ghg4_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg4_gen4/pVAMCFM_ggWWasZZ_sig_ghg2_gen4 << '\t' << pVAJHU_ggWWasZZ_sig_ghg4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1540  cout << "ggWWasZZ_sig_ghg2ghg4_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg2ghg4_gen4/pVAMCFM_ggWWasZZ_sig_ghg2_gen4 << '\t' << pVAJHU_ggWWasZZ_sig_ghg2ghg4/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1541  cout << "ggWWasZZ_sig_ghg2ghg4im_gen4: " << pVAMCFM_ggWWasZZ_sig_ghg2ghg4im_gen4/pVAMCFM_ggWWasZZ_sig_ghg2_gen4 << '\t' << pVAJHU_ggWWasZZ_sig_ghg2ghg4im/pVAJHU_ggWWasZZ_sig_selfDg1 << endl;
1542  cout << endl;
1543 
1544  /***** ZZ *****/
1545  cindex=2;
1546  mela.setCurrentCandidateFromIndex(cindex);
1547 
1548  float pVAMCFM_qqZZ_bkg;
1549  mela.setProcess(TVar::bkgZZ, TVar::MCFM, TVar::ZZQQB);
1550  mela.computeP(pVAMCFM_qqZZ_bkg, useConstants);
1551  cout << "pVAMCFM_qqZZ_bkg: " << pVAMCFM_qqZZ_bkg << '\n' << endl;
1552 
1553  float pVAMCFM_qqZJJ_bkg;
1554  mela.setProcess(TVar::bkgZJets, TVar::MCFM, TVar::JJQCD);
1555  mela.computeP(pVAMCFM_qqZJJ_bkg, useConstants);
1556  cout << "pVAMCFM_qqZJJ_bkg: " << pVAMCFM_qqZJJ_bkg << '\n' << endl;
1557 
1559  mela.computeP(pVAMCFM_ggZZ_total, useConstants);
1560  cout << "pVAMCFM_ggZZ_total: " << pVAMCFM_ggZZ_total << '\n' << endl;
1561 
1562  mela.setProcess(TVar::bkgZZ, TVar::MCFM, TVar::ZZGG);
1563  mela.computeP(pVAMCFM_ggZZ_bkg, useConstants);
1564  cout << "pVAMCFM_ggZZ_bkg: " << pVAMCFM_ggZZ_bkg << '\n' << endl;
1565 
1566  float pVAMCFM_ggZZ_sig;
1567  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1568  mela.setMelaHiggsWidth(wPOLE);
1569  mela.setMelaLeptonInterference(TVar::InterfOn);
1570  mela.computeP(pVAMCFM_ggZZ_sig, useConstants);
1571  cout << "pVAMCFM_ggZZ_sig: " << pVAMCFM_ggZZ_sig << '\n' << endl;
1572 
1573  float pVAMCFM_ZZ_sig_selfDg1;
1574  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1575  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1576  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1577  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1578  mela.setMelaHiggsWidth(wPOLE);
1579  mela.setMelaLeptonInterference(TVar::InterfOn);
1580  mela.computeP(pVAMCFM_ZZ_sig_selfDg1, useConstants);
1581  cout << "pVAMCFM_ggZZ_sig_selfDg1: " << pVAMCFM_ZZ_sig_selfDg1 << '\n' << endl;
1582 
1583  float pVAMCFM_ZZ_sig_selfDg1gzgs2;
1584  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1585  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1586  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1587  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1588  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1.0;
1589  mela.setMelaHiggsWidth(wPOLE);
1590  mela.setMelaLeptonInterference(TVar::InterfOn);
1591  mela.computeP(pVAMCFM_ZZ_sig_selfDg1gzgs2, useConstants);
1592  cout << "pVAMCFM_ZZ_sig_selfDg1gzgs2: " << pVAMCFM_ZZ_sig_selfDg1gzgs2 << '\n' << endl;
1593 
1594  float pVAMCFM_ZZ_sig_selfDg1gzgs4;
1595  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1596  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1597  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1598  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1599  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1.0;
1600  mela.setMelaHiggsWidth(wPOLE);
1601  mela.setMelaLeptonInterference(TVar::InterfOn);
1602  mela.computeP(pVAMCFM_ZZ_sig_selfDg1gzgs4, useConstants);
1603  cout << "pVAMCFM_ZZ_sig_selfDg1gzgs4: " << pVAMCFM_ZZ_sig_selfDg1gzgs4 << '\n' << endl;
1604 
1605  float pVAMCFM_ZZ_sig_selfDg1gzgs2im;
1606  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1607  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1608  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1609  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1610  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][1]=1.0;
1611  mela.setMelaHiggsWidth(wPOLE);
1612  mela.setMelaLeptonInterference(TVar::InterfOn);
1613  mela.computeP(pVAMCFM_ZZ_sig_selfDg1gzgs2im, useConstants);
1614  cout << "pVAMCFM_ZZ_sig_selfDg1gzgs2im: " << pVAMCFM_ZZ_sig_selfDg1gzgs2im << '\n' << endl;
1615 
1616  float pVAMCFM_ZZ_sig_selfDg1gzgs4im;
1617  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
1618  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.0;
1619  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.0;
1620  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1621  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][1]=1.0;
1622  mela.setMelaHiggsWidth(wPOLE);
1623  mela.setMelaLeptonInterference(TVar::InterfOn);
1624  mela.computeP(pVAMCFM_ZZ_sig_selfDg1gzgs4im, useConstants);
1625  cout << "pVAMCFM_ZZ_sig_selfDg1gzgs4im: " << pVAMCFM_ZZ_sig_selfDg1gzgs4im << '\n' << endl;
1626 
1627  float pVAJHU_ZZ_sig_selfDg1;
1629  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1630  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1631  mela.setMelaHiggsWidth(wPOLE);
1632  mela.setMelaLeptonInterference(TVar::InterfOn);
1633  mela.computeP(pVAJHU_ZZ_sig_selfDg1, useConstants);
1634  cout << "pVAJHU_ZZ_sig_selfDg1: " << pVAJHU_ZZ_sig_selfDg1 << '\n' << endl;
1635 
1636  float pVAJHU_ZZ_sig_selfDg1gzgs2;
1638  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1639  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1640  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1.0;
1641  mela.setMelaHiggsWidth(wPOLE);
1642  mela.setMelaLeptonInterference(TVar::InterfOn);
1643  mela.computeP(pVAJHU_ZZ_sig_selfDg1gzgs2, useConstants);
1644  cout << "pVAJHU_ZZ_sig_selfDg1gzgs2: " << pVAJHU_ZZ_sig_selfDg1gzgs2 << '\n' << endl;
1645 
1646  float pVAJHU_ZZ_sig_selfDg1gzgs4;
1648  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1649  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1650  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1.0;
1651  mela.setMelaHiggsWidth(wPOLE);
1652  mela.setMelaLeptonInterference(TVar::InterfOn);
1653  mela.computeP(pVAJHU_ZZ_sig_selfDg1gzgs4, useConstants);
1654  cout << "pVAJHU_ZZ_sig_selfDg1gzgs4: " << pVAJHU_ZZ_sig_selfDg1gzgs4 << '\n' << endl;
1655 
1656  float pVAJHU_ZZ_sig_selfDg1gzgs2im;
1658  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1659  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1660  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][1]=1.0;
1661  mela.setMelaHiggsWidth(wPOLE);
1662  mela.setMelaLeptonInterference(TVar::InterfOn);
1663  mela.computeP(pVAJHU_ZZ_sig_selfDg1gzgs2im, useConstants);
1664  cout << "pVAJHU_ZZ_sig_selfDg1gzgs2im: " << pVAJHU_ZZ_sig_selfDg1gzgs2im << '\n' << endl;
1665 
1666  float pVAJHU_ZZ_sig_selfDg1gzgs4im;
1668  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.0;
1669  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.0;
1670  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][1]=1.0;
1671  mela.setMelaHiggsWidth(wPOLE);
1672  mela.setMelaLeptonInterference(TVar::InterfOn);
1673  mela.computeP(pVAJHU_ZZ_sig_selfDg1gzgs4im, useConstants);
1674  cout << "pVAJHU_ZZ_sig_selfDg1gzgs4im: " << pVAJHU_ZZ_sig_selfDg1gzgs4im << '\n' << endl;
1675 
1676  cout << "MCFM vs JHUGen Ratio comparison:" << endl;
1677 
1678  cout << "ZZ_sig_selfDg1gzgs2: " << pVAMCFM_ZZ_sig_selfDg1gzgs2/pVAMCFM_ZZ_sig_selfDg1 << '\t' << pVAJHU_ZZ_sig_selfDg1gzgs2/pVAJHU_ZZ_sig_selfDg1 << endl;
1679  cout << "ZZ_sig_selfDg1gzgs4: " << pVAMCFM_ZZ_sig_selfDg1gzgs4/pVAMCFM_ZZ_sig_selfDg1 << '\t' << pVAJHU_ZZ_sig_selfDg1gzgs4/pVAJHU_ZZ_sig_selfDg1 << endl;
1680  cout << "ZZ_sig_selfDg1gzgs2im: " << pVAMCFM_ZZ_sig_selfDg1gzgs2im/pVAMCFM_ZZ_sig_selfDg1 << '\t' << pVAJHU_ZZ_sig_selfDg1gzgs2im/pVAJHU_ZZ_sig_selfDg1 << endl;
1681  cout << "ZZ_sig_selfDg1gzgs4im: " << pVAMCFM_ZZ_sig_selfDg1gzgs4im/pVAMCFM_ZZ_sig_selfDg1 << '\t' << pVAJHU_ZZ_sig_selfDg1gzgs4im/pVAJHU_ZZ_sig_selfDg1 << endl;
1682  cout << endl;
1683 
1684 
1685  /***** ZG *****/
1686  cindex=3;
1687  mela.setCurrentCandidateFromIndex(cindex);
1688  float pVAMCFM_ZG_bkg;
1690  mela.computeP(pVAMCFM_ZG_bkg, useConstants);
1691  cout << "pVAMCFM_qqZG_bkg: " << pVAMCFM_ZG_bkg << '\n' << endl;
1692 
1693  if (verbosity>=TVar::DEBUG){
1694  cout << "Removing Mela candidates\nSummary:" << endl;
1695  for (int ic=0; ic<mela.getNCandidates(); ic++){
1696  cout << "Candidate " << ic << endl;
1697  mela.setCurrentCandidateFromIndex(ic);
1698  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
1699  }
1700  cout << endl;
1701  }
1702  mela.resetInputEvent();
1703  cout << "Removed..." << endl;
1704  }
1705 
1706  cout.rdbuf(coutbuf);
1707  tout.close();
1708  mela.setVerbosity(bkpverbosity);
1709 }
1710 
1711 void testME_VH_JHUGen_Ping(int erg_tev=13, bool useConstants=false, shared_ptr<Mela> melaptr=nullptr){
1712  TString strtout = Form("testME_VH_JHUGen_Ping_%iTeV_%i.out", erg_tev, (int)useConstants);
1713  ofstream tout(strtout.Data());
1714  streambuf* coutbuf = cout.rdbuf();
1715  cout.rdbuf(tout.rdbuf());
1716 
1717  float mPOLE=125.;
1718  float wPOLE=4.07e-3;
1719  constexpr double xw = 0.23119;
1720 
1721  TVar::VerbosityLevel verbosity = TVar::ERROR;
1722  if (verbosity>=TVar::DEBUG) cout << "Initializing Mela..." << endl;
1723  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
1724  Mela& mela = *melaptr;
1725  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
1726  mela.setVerbosity(verbosity);
1727  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
1728  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
1729 
1730  int GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
1731  const int nEntries = 6;
1732  double a1_array[nEntries][4] ={
1733  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 },
1734  { 238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188 },
1735  { 101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749 },
1736  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
1737  { 101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268 },
1738  { 24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428 }
1739  };
1740  double a2_array[nEntries][4] ={
1741  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
1742  { 317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883 },
1743  { 180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915 },
1744  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
1745  { 95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792 },
1746  { 49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688 }
1747  };
1748  double l1_array[nEntries][4] ={
1749  { 51.374202, 25.924766, 12.290178, 42.616376 },
1750  { 51.374202, 25.924766, 12.290178, 42.616376 },
1751  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
1752  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
1753  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
1754  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
1755  };
1756  double l2_array[nEntries][4] ={
1757  { 271.875752, 70.427173, -11.138146, 261.769598 },
1758  { 21.481452, 9.489680, -9.336587, 16.858699 },
1759  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
1760  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
1761  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
1762  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
1763  };
1764  double l3_array[nEntries][4] ={
1765  { 75.823478, -16.640412, 23.246999, 70.227220 },
1766  { 75.823478, -16.640412, 23.246999, 70.227220 },
1767  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
1768  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
1769  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
1770  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
1771  };
1772  double l4_array[nEntries][4] ={
1773  { 21.481452, 9.489680, -9.336587, 16.858699 },
1774  { 271.875752, 70.427173, -11.138146, 261.769598 },
1775  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
1776  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
1777  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
1778  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
1779  };
1780 
1781  // Decay mode does not matter, just use something
1782  GenLep1Id=13;
1783  GenLep2Id=-13;
1784  GenLep3Id=11;
1785  GenLep4Id=-11;
1786 
1787  for (int ev = 2; ev < 3; ev++){
1788  SimpleParticleCollection_t aparticles;
1789  TLorentzVector pAPart[2];
1790  pAPart[0].SetXYZT(a1_array[ev][1], a1_array[ev][2], a1_array[ev][3], a1_array[ev][0]);
1791  pAPart[1].SetXYZT(a2_array[ev][1], a2_array[ev][2], a2_array[ev][3], a2_array[ev][0]);
1792  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t(0, pAPart[iap])); // q q'
1793  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*13, pAPart[iap])); // l- l+
1794  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*14, pAPart[iap])); // nub nu
1795  for (unsigned int iap=0; iap<1; iap++) aparticles.push_back(SimpleParticle_t(22, pAPart[iap])); // gamma
1796 
1797  int idOrdered[4] ={ GenLep1Id, GenLep2Id, GenLep3Id, GenLep4Id };
1798  TLorentzVector pOrdered[4];
1799  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
1800  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
1801  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
1802  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
1804  for (unsigned int idau=0; idau<4; idau++) daughters.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
1805 
1806  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
1807  mela.setInputEvent(&daughters, &aparticles, (SimpleParticleCollection_t*)0, false);
1808 
1809  cout << "*******************************************************" << endl;
1810  for (int ic=0; ic<mela.getNCandidates(); ic++){
1811  cout << "Summary of candidate " << ic << ":" << endl;
1812  mela.setCurrentCandidateFromIndex(ic);
1813  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
1814  cout << "*******************************************************" << endl;
1815  }
1816  cout << "*******************************************************" << endl;
1817  cout << endl;
1818 
1819  int cindex;
1820  cindex=0;
1821  mela.setCurrentCandidateFromIndex(cindex);
1822 
1823  TString strlh[3]={ "leptonic", "hadronic", "photonic" };
1824  TString strzwh[3]={ "ZH", "WH", "GammaH" };
1826  for (unsigned int ilh=0; ilh<3; ilh++){
1827  TString lhapp = strlh[ilh];
1828  for (unsigned int izwa=0; izwa<3; izwa++){
1829  TString zwapp = strzwh[izwa];
1830  if (ilh==0 && izwa==0) prod=TVar::Lep_ZH;
1831  else if (ilh==0 && izwa==1) prod=TVar::Lep_WH;
1832  else if (ilh==1 && izwa==0) prod=TVar::Had_ZH;
1833  else if (ilh==1 && izwa==1) prod=TVar::Had_WH;
1834  else if (ilh==2 && izwa==2) prod=TVar::GammaH;
1835  else continue;
1836 
1837  cout << "*******************************************************" << endl;
1838  cout << "Computing MEs for " << strlh[ilh] << " " << strzwh[izwa] << endl;
1839 
1840  float p0mplus=0;
1841  mela.setProcess(TVar::HSMHiggs, TVar::JHUGen, prod);
1842  mela.computeProdP_VH(p0mplus, false, useConstants);
1843  cout << "p0mplus: " << p0mplus << '\n' << endl;
1844 
1845  float p0g1prime2=0;
1846  mela.setProcess(TVar::H0_g1prime2, TVar::JHUGen, prod);
1847  mela.computeProdP_VH(p0g1prime2, false, useConstants);
1848  cout << "p0g1prime2: " << p0g1prime2 << '\n' << endl;
1849 
1850  float p0hplus=0;
1851  mela.setProcess(TVar::H0hplus, TVar::JHUGen, prod);
1852  mela.computeProdP_VH(p0hplus, false, useConstants);
1853  cout << "p0hplus: " << p0hplus << '\n' << endl;
1854 
1855  float p0minus=0;
1856  mela.setProcess(TVar::H0minus, TVar::JHUGen, prod);
1857  mela.computeProdP_VH(p0minus, false, useConstants);
1858  cout << "p0minus: " << p0minus << '\n' << endl;
1859 
1860  float p0gzgs1prime2=0;
1862  mela.computeProdP_VH(p0gzgs1prime2, false, useConstants);
1863  cout << "p0gzgs1prime2: " << p0gzgs1prime2 << '\n' << endl;
1864 
1865  float p0hpluszgs=0;
1866  mela.setProcess(TVar::H0_Zgs, TVar::JHUGen, prod);
1867  mela.computeProdP_VH(p0hpluszgs, false, useConstants);
1868  cout << "p0hpluszgs: " << p0hpluszgs << '\n' << endl;
1869 
1870  // SelfD MEs
1871  float p0mplus_selfD=0;
1873  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
1874  mela.computeProdP_VH(p0mplus_selfD, false, useConstants);
1875  cout << "p0mplus_selfD: " << p0mplus_selfD << '\n' << endl;
1876 
1877  if (izwa!=2){
1878  float p0mplus_selfD_CT=0;
1880  if (izwa==0){
1881  mela.selfDHzzpcoupl[gHIGGS_VV_1][0]=0.5;
1882  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
1883  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
1884  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
1885  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
1886  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
1887  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
1888  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
1889  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
1890  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
1891  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
1892  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
1893  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
1894  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
1895  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
1896  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
1897  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
1898  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
1899  mela.selfDM_Zprime=91.1876;
1900  mela.selfDGa_Zprime=2.4952;
1901  }
1902  else{
1903  mela.selfDHzzpcoupl[gHIGGS_VV_1][0]=0.5;
1904  //mela.selfDHwwpcoupl[gHIGGS_VV_1][0]=0.5;
1905  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
1906  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
1907  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
1908  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
1909  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
1910  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
1911  mela.selfDM_Wprime=80.399;
1912  mela.selfDGa_Wprime=2.085;
1913  }
1914  mela.computeProdP_VH(p0mplus_selfD_CT, false, useConstants);
1915  cout << "p0mplus_selfD_CT: " << p0mplus_selfD_CT << '\n' << endl;
1916 
1917  float p0mplus_selfD_VpVp=0;
1919  if (izwa==0){
1920  mela.selfDHzpzpcoupl[gHIGGS_VV_1][0]=1;
1921  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
1922  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
1923  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
1924  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
1925  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
1926  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
1927  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
1928  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
1929  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
1930  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
1931  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
1932  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
1933  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
1934  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
1935  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
1936  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
1937  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
1938  mela.selfDM_Zprime=91.1876;
1939  mela.selfDGa_Zprime=2.4952;
1940  }
1941  else{
1942  mela.selfDHzpzpcoupl[gHIGGS_VV_1][0]=1;
1943  //mela.selfDHwpwpcoupl[gHIGGS_VV_1][0]=1;
1944  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
1945  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
1946  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
1947  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
1948  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
1949  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
1950  mela.selfDM_Wprime=80.399;
1951  mela.selfDGa_Wprime=2.085;
1952  }
1953  mela.computeProdP_VH(p0mplus_selfD_VpVp, false, useConstants);
1954  cout << "p0mplus_selfD_VpVp: " << p0mplus_selfD_VpVp << '\n' << endl;
1955 
1956  float p0hplus_selfD_CT=0;
1958  if (izwa==0){
1959  mela.selfDHzzpcoupl[gHIGGS_VV_2][0]=0.5;
1960  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
1961  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
1962  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
1963  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
1964  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
1965  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
1966  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
1967  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
1968  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
1969  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
1970  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
1971  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
1972  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
1973  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
1974  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
1975  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
1976  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
1977  mela.selfDM_Zprime=91.1876;
1978  mela.selfDGa_Zprime=2.4952;
1979  }
1980  else{
1981  mela.selfDHzzpcoupl[gHIGGS_VV_2][0]=0.5;
1982  //mela.selfDHwwpcoupl[gHIGGS_VV_2][0]=0.5;
1983  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
1984  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
1985  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
1986  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
1987  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
1988  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
1989  mela.selfDM_Wprime=80.399;
1990  mela.selfDGa_Wprime=2.085;
1991  }
1992  mela.computeProdP_VH(p0hplus_selfD_CT, false, useConstants);
1993  cout << "p0hplus_selfD_CT: " << p0hplus_selfD_CT << '\n' << endl;
1994 
1995  float p0hplus_selfD_VpVp=0;
1997  if (izwa==0){
1998  mela.selfDHzpzpcoupl[gHIGGS_VV_2][0]=1;
1999  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2000  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2001  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2002  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2003  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2004  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2005  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2006  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2007  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2008  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2009  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2010  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2011  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2012  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2013  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2014  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2015  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2016  mela.selfDM_Zprime=91.1876;
2017  mela.selfDGa_Zprime=2.4952;
2018  }
2019  else{
2020  mela.selfDHzpzpcoupl[gHIGGS_VV_2][0]=1;
2021  //mela.selfDHwpwpcoupl[gHIGGS_VV_2][0]=1;
2022  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2023  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2024  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2025  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2026  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2027  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2028  mela.selfDM_Wprime=80.399;
2029  mela.selfDGa_Wprime=2.085;
2030  }
2031  mela.computeProdP_VH(p0hplus_selfD_VpVp, false, useConstants);
2032  cout << "p0hplus_selfD_VpVp: " << p0hplus_selfD_VpVp << '\n' << endl;
2033 
2034  float p0minus_selfD_CT=0;
2036  if (izwa==0){
2037  mela.selfDHzzpcoupl[gHIGGS_VV_4][0]=0.5;
2038  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2039  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2040  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2041  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2042  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2043  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2044  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2045  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2046  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2047  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2048  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2049  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2050  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2051  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2052  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2053  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2054  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2055  mela.selfDM_Zprime=91.1876;
2056  mela.selfDGa_Zprime=2.4952;
2057  }
2058  else{
2059  mela.selfDHzzpcoupl[gHIGGS_VV_4][0]=0.5;
2060  //mela.selfDHwwpcoupl[gHIGGS_VV_4][0]=0.5;
2061  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2062  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2063  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2064  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2065  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2066  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2067  mela.selfDM_Wprime=80.399;
2068  mela.selfDGa_Wprime=2.085;
2069  }
2070  mela.computeProdP_VH(p0minus_selfD_CT, false, useConstants);
2071  cout << "p0minus_selfD_CT: " << p0minus_selfD_CT << '\n' << endl;
2072 
2073  float p0minus_selfD_VpVp=0;
2075  if (izwa==0){
2076  mela.selfDHzpzpcoupl[gHIGGS_VV_4][0]=1;
2077  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2078  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2079  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2080  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2081  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2082  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2083  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2084  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2085  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2086  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2087  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2088  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2089  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2090  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2091  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2092  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2093  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2094  mela.selfDM_Zprime=91.1876;
2095  mela.selfDGa_Zprime=2.4952;
2096  }
2097  else{
2098  mela.selfDHzpzpcoupl[gHIGGS_VV_4][0]=1;
2099  //mela.selfDHwpwpcoupl[gHIGGS_VV_4][0]=1;
2100  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2101  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2102  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2103  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2104  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2105  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2106  mela.selfDM_Wprime=80.399;
2107  mela.selfDGa_Wprime=2.085;
2108  }
2109  mela.computeProdP_VH(p0minus_selfD_VpVp, false, useConstants);
2110  cout << "p0minus_selfD_VpVp: " << p0minus_selfD_VpVp << '\n' << endl; }
2111 
2112  float p0g1prime2_selfD=0;
2114  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=1;
2115  mela.computeProdP_VH(p0g1prime2_selfD, false, useConstants);
2116  cout << "p0g1prime2_selfD: " << p0g1prime2_selfD << '\n' << endl;
2117 
2118  float p0hplus_selfD=0;
2120  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
2121  mela.computeProdP_VH(p0hplus_selfD, false, useConstants);
2122  cout << "p0hplus_selfD: " << p0hplus_selfD << '\n' << endl;
2123 
2124  float p0minus_selfD=0;
2126  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
2127  mela.computeProdP_VH(p0minus_selfD, false, useConstants);
2128  cout << "p0minus_selfD: " << p0minus_selfD << '\n' << endl;
2129 
2130  float p0gzgs1prime2_selfD=0;
2132  mela.selfDHzzcoupl[0][gHIGGS_ZA_1_PRIME2][0]=1;
2133  mela.computeProdP_VH(p0gzgs1prime2_selfD, false, useConstants);
2134  cout << "p0gzgs1prime2_selfD: " << p0gzgs1prime2_selfD << '\n' << endl;
2135 
2136  float p0hpluszgs_selfD=0;
2138  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1;
2139  mela.computeProdP_VH(p0hpluszgs_selfD, false, useConstants);
2140  cout << "p0hpluszgs_selfD: " << p0hpluszgs_selfD << '\n' << endl;
2141 
2142  float recoBW=-99;
2143  mela.computeDijetConvBW(recoBW);
2144  cout << "Reco BW: " << recoBW << '\n' << endl;
2145 
2146  float idealBW=-99;
2147  mela.computeDijetConvBW(idealBW, true);
2148  cout << "Ideal BW: " << idealBW << '\n' << endl;
2149 
2150  cout << "*******************************************************" << endl;
2151 
2152  float mVstar = 0, mV = 0, costhetastar = 0, costheta1 = 0, costheta2 = 0, Phi = 0, Phi1 = 0;
2153  if (prod != TVar::GammaH) mela.computeVHAngles(
2154  mVstar,
2155  mV,
2156  costheta1,
2157  costheta2,
2158  Phi,
2159  costhetastar,
2160  Phi1
2161  );
2162  cout << "VH (" << TVar::ProductionName(prod) << ") angles: " << mVstar << " " << mV << " " << costheta1 << " " << costheta2 << " " << Phi << " " << costhetastar << " " << Phi1 << endl;
2163 
2164  }
2165  }
2166 
2167  mela.resetInputEvent();
2168  }
2169 
2170  cout.rdbuf(coutbuf);
2171  tout.close();
2172  mela.setVerbosity(bkpverbosity);
2173 }
2174 
2175 void testME_Dec_JHUGen_Ping(int erg_tev=13, bool useConstants=false, shared_ptr<Mela> melaptr=nullptr){
2176  TString strtout = Form("testME_Dec_JHUGen_Ping_%iTeV_%i.out", erg_tev, (int)useConstants);
2177  ofstream tout(strtout.Data());
2178  streambuf* coutbuf = cout.rdbuf();
2179  cout.rdbuf(tout.rdbuf());
2180 
2181  float mPOLE=125.;
2182  float wPOLE=4.07e-3;
2183 
2184  TVar::VerbosityLevel verbosity = TVar::ERROR;
2185  if (verbosity>=TVar::DEBUG) cout << "Initializing Mela..." << endl;
2186  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
2187  Mela& mela = *melaptr;
2188  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
2189  auto bkpprecision = cout.precision(10);
2190  mela.setVerbosity(verbosity);
2191  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
2192  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
2193 
2194  int GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
2195  const int nEntries = 6;
2196  double a1_array[nEntries][4] ={
2197  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 },
2198  { 238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188 },
2199  { 101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749 },
2200  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2201  { 101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268 },
2202  { 24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428 }
2203  };
2204  double a2_array[nEntries][4] ={
2205  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2206  { 317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883 },
2207  { 180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915 },
2208  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2209  { 95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792 },
2210  { 49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688 }
2211  };
2212  double l1_array[nEntries][4] ={
2213  { 51.374202, 25.924766, 12.290178, 42.616376 },
2214  { 51.374202, 25.924766, 12.290178, 42.616376 },
2215  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
2216  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
2217  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
2218  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
2219  };
2220  double l2_array[nEntries][4] ={
2221  { 271.875752, 70.427173, -11.138146, 261.769598 },
2222  { 21.481452, 9.489680, -9.336587, 16.858699 },
2223  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2224  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2225  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2226  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
2227  };
2228  double l3_array[nEntries][4] ={
2229  { 75.823478, -16.640412, 23.246999, 70.227220 },
2230  { 75.823478, -16.640412, 23.246999, 70.227220 },
2231  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2232  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2233  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2234  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
2235  };
2236  double l4_array[nEntries][4] ={
2237  { 21.481452, 9.489680, -9.336587, 16.858699 },
2238  { 271.875752, 70.427173, -11.138146, 261.769598 },
2239  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2240  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2241  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2242  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
2243  };
2244 
2245  // Decay mode does not matter, just use something
2246  GenLep1Id=13;
2247  GenLep2Id=-13;
2248  GenLep3Id=11;
2249  GenLep4Id=-11;
2250 
2251  for (int ev = 2; ev < 3; ev++){
2252  SimpleParticleCollection_t aparticles;
2253  TLorentzVector pAPart[2];
2254  pAPart[0].SetXYZT(a1_array[ev][1], a1_array[ev][2], a1_array[ev][3], a1_array[ev][0]);
2255  pAPart[1].SetXYZT(a2_array[ev][1], a2_array[ev][2], a2_array[ev][3], a2_array[ev][0]);
2256  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t(0, pAPart[iap])); // q q'
2257  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*13, pAPart[iap])); // l- l+
2258  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*14, pAPart[iap])); // nub nu
2259  for (unsigned int iap=0; iap<1; iap++) aparticles.push_back(SimpleParticle_t(22, pAPart[iap])); // gamma
2260 
2261  int idOrdered[4] ={ GenLep1Id, GenLep2Id, GenLep3Id, GenLep4Id };
2262  TLorentzVector pOrdered[4];
2263  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
2264  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
2265  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
2266  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
2268  for (unsigned int idau=0; idau<4; idau++) daughters.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
2269 
2270  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
2271  mela.setInputEvent(&daughters, &aparticles, (SimpleParticleCollection_t*)0, false);
2272 
2273  cout << "*******************************************************" << endl;
2274  for (int ic=0; ic<mela.getNCandidates(); ic++){
2275  cout << "Summary of candidate " << ic << ":" << endl;
2276  mela.setCurrentCandidateFromIndex(ic);
2277  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
2278  cout << "*******************************************************" << endl;
2279  }
2280  cout << "*******************************************************" << endl;
2281  cout << endl;
2282 
2283  int cindex;
2284  cindex=0;
2285  mela.setCurrentCandidateFromIndex(cindex);
2286 
2287  TString strlh[3]={ "leptonic", "hadronic", "photonic" };
2288  TString strzwh[3]={ "ZH", "WH", "GammaH" };
2290 
2291  cout << "*******************************************************" << endl;
2292  cout << "Computing MEs for ZZ decay" << endl;
2293 
2294  float p0mplus=0;
2296  mela.computeP(p0mplus, useConstants);
2297  cout << "p0mplus: " << p0mplus << '\n' << endl;
2298 
2299  float p0g1prime2=0;
2301  mela.computeP(p0g1prime2, useConstants);
2302  cout << "p0g1prime2: " << p0g1prime2 << '\n' << endl;
2303 
2304  float p0hplus=0;
2305  mela.setProcess(TVar::H0hplus, TVar::JHUGen, TVar::ZZGG);
2306  mela.computeP(p0hplus, useConstants);
2307  cout << "p0hplus: " << p0hplus << '\n' << endl;
2308 
2309  float p0minus=0;
2310  mela.setProcess(TVar::H0minus, TVar::JHUGen, TVar::ZZGG);
2311  mela.computeP(p0minus, useConstants);
2312  cout << "p0minus: " << p0minus << '\n' << endl;
2313 
2314  float p0gzgs1prime2=0;
2316  mela.computeP(p0gzgs1prime2, useConstants);
2317  cout << "p0gzgs1prime2: " << p0gzgs1prime2 << '\n' << endl;
2318 
2319  float p0hpluszgs=0;
2320  mela.setProcess(TVar::H0_Zgs, TVar::JHUGen, TVar::ZZGG);
2321  mela.computeP(p0hpluszgs, useConstants);
2322  cout << "p0hpluszgs: " << p0hpluszgs << '\n' << endl;
2323 
2324  // SelfD MEs
2325  float p0mplus_selfD=0;
2327  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
2328  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
2329  mela.computeP(p0mplus_selfD, useConstants);
2330  cout << "p0mplus_selfD: " << p0mplus_selfD << '\n' << endl;
2331 
2332  float p0mplus_selfD_CT=0;
2334  double xw = 0.23119;
2335  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
2336  mela.selfDHzpzpcoupl[gHIGGS_VV_1][0]=1;
2337  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2338  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2339  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2340  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2341  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2342  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2343  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2344  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2345  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2346  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2347  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2348  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2349  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2350  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2351  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2352  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2353  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2354  mela.selfDM_Zprime=91.1876;
2355  mela.selfDGa_Zprime=2.4952;
2356  mela.computeP(p0mplus_selfD_CT, useConstants);
2357  cout << "p0mplus_selfD_CT: " << p0mplus_selfD_CT << '\n' << endl;
2358 
2359  float p0g1prime2_selfD=0;
2361  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
2362  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=1;
2363  mela.computeP(p0g1prime2_selfD, useConstants);
2364  cout << "p0g1prime2_selfD: " << p0g1prime2_selfD << '\n' << endl;
2365 
2366  float p0hplus_selfD=0;
2368  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
2369  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
2370  mela.computeP(p0hplus_selfD, useConstants);
2371  cout << "p0hplus_selfD: " << p0hplus_selfD << '\n' << endl;
2372 
2373  float p0minus_selfD=0;
2375  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
2376  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
2377  mela.computeP(p0minus_selfD, useConstants);
2378  cout << "p0minus_selfD: " << p0minus_selfD << '\n' << endl;
2379 
2380  float p0gzgs1prime2_selfD=0;
2382  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
2383  mela.selfDHzzcoupl[0][gHIGGS_ZA_1_PRIME2][0]=1;
2384  mela.computeP(p0gzgs1prime2_selfD, useConstants);
2385  cout << "p0gzgs1prime2_selfD: " << p0gzgs1prime2_selfD << '\n' << endl;
2386 
2387  float p0hpluszgs_selfD=0;
2389  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
2390  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1;
2391  mela.computeP(p0hpluszgs_selfD, useConstants);
2392  cout << "p0hpluszgs_selfD: " << p0hpluszgs_selfD << '\n' << endl;
2393 
2394  float costhetastar = 0, costheta1 = 0, costheta2 = 0, Phi = 0, Phi1 = 0;
2395  float costhetastarMELA = 0, costheta1MELA = 0, costheta2MELA = 0, PhiMELA = 0, Phi1MELA = 0, m1MELA = 0, m2MELA = 0, m4lMELA = 0;
2397  costhetastar,
2398  costheta1,
2399  costheta2,
2400  Phi,
2401  Phi1,
2402 
2403  daughters.at(2).second, daughters.at(2).first,
2404  daughters.at(3).second, daughters.at(3).first,
2405  daughters.at(0).second, daughters.at(0).first,
2406  daughters.at(1).second, daughters.at(1).first
2407  );
2408  mela.computeDecayAngles(
2409  m4lMELA,
2410  m1MELA,
2411  m2MELA,
2412  costheta1MELA,
2413  costheta2MELA,
2414  PhiMELA,
2415  costhetastarMELA,
2416  Phi1MELA
2417  );
2418 
2419  cout << "TUtil decay angles: " << costheta1 << " " << costheta2 << " " << Phi << " " << costhetastar << " " << Phi1 << endl;
2420  cout << "MELA decay angles: " << costheta1MELA << " " << costheta2MELA << " " << PhiMELA << " " << costhetastarMELA << " " << Phi1MELA << endl;
2421  cout << "MELA masses: " << m4lMELA << " " << m1MELA << " " << m2MELA << endl;
2422 
2423  mela.resetInputEvent();
2424  }
2425 
2426  cout.rdbuf(coutbuf);
2427  tout.close();
2428  mela.setVerbosity(bkpverbosity);
2429  cout.precision(bkpprecision);
2430 }
2431 
2432 void testME_VBF_JHUGen_Ping(int erg_tev=13, bool useConstants=false, shared_ptr<Mela> melaptr=nullptr){
2433  TString strtout = Form("testME_VBF_JHUGen_Ping_%iTeV_%i.out", erg_tev, (int)useConstants);
2434  ofstream tout(strtout.Data());
2435  streambuf* coutbuf = cout.rdbuf();
2436  cout.rdbuf(tout.rdbuf());
2437 
2438  float mPOLE=125.;
2439  float wPOLE=4.07e-3;
2440 
2441  TVar::VerbosityLevel verbosity = TVar::ERROR;
2442  if (verbosity>=TVar::DEBUG) cout << "Initializing Mela..." << endl;
2443  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
2444  Mela& mela = *melaptr;
2445  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
2446  mela.setVerbosity(verbosity);
2447  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
2448  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
2449 
2450  int GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
2451  const int nEntries = 6;
2452  double a1_array[nEntries][4] ={
2453  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 },
2454  { 238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188 },
2455  { 101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749 },
2456  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2457  { 101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268 },
2458  { 24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428 }
2459  };
2460  double a2_array[nEntries][4] ={
2461  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2462  { 317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883 },
2463  { 180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915 },
2464  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2465  { 95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792 },
2466  { 49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688 }
2467  };
2468  double l1_array[nEntries][4] ={
2469  { 51.374202, 25.924766, 12.290178, 42.616376 },
2470  { 51.374202, 25.924766, 12.290178, 42.616376 },
2471  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
2472  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
2473  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
2474  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
2475  };
2476  double l2_array[nEntries][4] ={
2477  { 271.875752, 70.427173, -11.138146, 261.769598 },
2478  { 21.481452, 9.489680, -9.336587, 16.858699 },
2479  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2480  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2481  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2482  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
2483  };
2484  double l3_array[nEntries][4] ={
2485  { 75.823478, -16.640412, 23.246999, 70.227220 },
2486  { 75.823478, -16.640412, 23.246999, 70.227220 },
2487  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2488  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2489  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
2490  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
2491  };
2492  double l4_array[nEntries][4] ={
2493  { 21.481452, 9.489680, -9.336587, 16.858699 },
2494  { 271.875752, 70.427173, -11.138146, 261.769598 },
2495  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2496  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
2497  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
2498  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
2499  };
2500 
2501  // Decay mode does not matter, just use something
2502  GenLep1Id=13;
2503  GenLep2Id=-13;
2504  GenLep3Id=11;
2505  GenLep4Id=-11;
2506 
2507  for (int ev = 2; ev < 3; ev++){
2508  SimpleParticleCollection_t aparticles;
2509  TLorentzVector pAPart[2];
2510  pAPart[0].SetXYZT(a1_array[ev][1], a1_array[ev][2], a1_array[ev][3], a1_array[ev][0]);
2511  pAPart[1].SetXYZT(a2_array[ev][1], a2_array[ev][2], a2_array[ev][3], a2_array[ev][0]);
2512  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t(0, pAPart[iap])); // q q'
2513  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*13, pAPart[iap])); // l- l+
2514  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*14, pAPart[iap])); // nub nu
2515  for (unsigned int iap=0; iap<1; iap++) aparticles.push_back(SimpleParticle_t(22, pAPart[iap])); // gamma
2516 
2517  int idOrdered[4] ={ GenLep1Id, GenLep2Id, GenLep3Id, GenLep4Id };
2518  TLorentzVector pOrdered[4];
2519  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
2520  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
2521  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
2522  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
2524  for (unsigned int idau=0; idau<4; idau++) daughters.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
2525 
2526  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
2527  mela.setInputEvent(&daughters, &aparticles, (SimpleParticleCollection_t*)0, false);
2528 
2529  if (verbosity>=TVar::DEBUG){
2530  cout << "*******************************************************" << endl;
2531  for (int ic=0; ic<mela.getNCandidates(); ic++){
2532  cout << "Summary of candidate " << ic << ":" << endl;
2533  mela.setCurrentCandidateFromIndex(ic);
2534  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
2535  cout << "*******************************************************" << endl;
2536  }
2537  cout << "*******************************************************" << endl;
2538  cout << endl;
2539  }
2540 
2541  int cindex;
2542  cindex=0;
2543  mela.setCurrentCandidateFromIndex(cindex);
2544 
2545  TString strlh[1]={ "hadronic" };
2546  TString strzwh[3]={ "VBF", "Z-BF", "W-BF" };
2548  for (unsigned int ilh=0; ilh<1; ilh++){
2549  TString lhapp = strlh[ilh];
2550  for (unsigned int izwa=0; izwa<3; izwa++){
2551  TString zwapp = strzwh[izwa];
2552  prod=TVar::JJVBF;
2553 
2554  cout << "*******************************************************" << endl;
2555  cout << "Computing MEs for " << strlh[ilh] << " " << strzwh[izwa] << endl;
2556 
2557  if (izwa==0){
2558  float p0mplus=0;
2559  mela.setProcess(TVar::HSMHiggs, TVar::JHUGen, prod);
2560  mela.computeProdP(p0mplus, useConstants);
2561  cout << "p0mplus: " << p0mplus << '\n' << endl;
2562 
2563  float p0g1prime2=0;
2564  mela.setProcess(TVar::H0_g1prime2, TVar::JHUGen, prod);
2565  mela.computeProdP(p0g1prime2, useConstants);
2566  cout << "p0g1prime2: " << p0g1prime2 << '\n' << endl;
2567 
2568  float p0hplus=0;
2569  mela.setProcess(TVar::H0hplus, TVar::JHUGen, prod);
2570  mela.computeProdP(p0hplus, useConstants);
2571  cout << "p0hplus: " << p0hplus << '\n' << endl;
2572 
2573  float p0minus=0;
2574  mela.setProcess(TVar::H0minus, TVar::JHUGen, prod);
2575  mela.computeProdP(p0minus, useConstants);
2576  cout << "p0minus: " << p0minus << '\n' << endl;
2577 
2578  float p0gzgs1prime2=0;
2580  mela.computeProdP(p0gzgs1prime2, useConstants);
2581  cout << "p0gzgs1prime2: " << p0gzgs1prime2 << '\n' << endl;
2582 
2583  float p0hpluszgs=0;
2584  mela.setProcess(TVar::H0_Zgs, TVar::JHUGen, prod);
2585  mela.computeProdP(p0hpluszgs, useConstants);
2586  cout << "p0hpluszgs: " << p0hpluszgs << '\n' << endl;
2587  }
2588 
2589  // SelfD MEs
2590  float p0mplus_selfD=0;
2592  if (izwa==1 || izwa==0) mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
2593  else mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
2594  if (izwa!=0) mela.differentiate_HWW_HZZ=true;
2595  mela.computeProdP(p0mplus_selfD, useConstants);
2596  cout << "p0mplus_selfD: " << p0mplus_selfD << '\n' << endl;
2597 
2598  if (izwa==0){
2599  float p0g1prime2_selfD=0;
2601  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=1;
2602  mela.computeProdP(p0g1prime2_selfD, useConstants);
2603  cout << "p0g1prime2_selfD: " << p0g1prime2_selfD << '\n' << endl;
2604  }
2605 
2606  float p0hplus_selfD=0;
2608  if (izwa==1 || izwa==0) mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
2609  else mela.selfDHwwcoupl[0][gHIGGS_VV_2][0]=1;
2610  if (izwa!=0) mela.differentiate_HWW_HZZ=true;
2611  mela.computeProdP(p0hplus_selfD, useConstants);
2612  cout << "p0hplus_selfD: " << p0hplus_selfD << '\n' << endl;
2613 
2614  float p0minus_selfD=0;
2616  if (izwa==1 || izwa==0) mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
2617  else mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1;
2618  if (izwa!=0) mela.differentiate_HWW_HZZ=true;
2619  mela.computeProdP(p0minus_selfD, useConstants);
2620  cout << "p0minus_selfD: " << p0minus_selfD << '\n' << endl;
2621 
2622  if (izwa==0){
2623  float p0gzgs1prime2_selfD=0;
2625  mela.selfDHzzcoupl[0][gHIGGS_ZA_1_PRIME2][0]=1;
2626  mela.computeProdP(p0gzgs1prime2_selfD, useConstants);
2627  cout << "p0gzgs1prime2_selfD: " << p0gzgs1prime2_selfD << '\n' << endl;
2628 
2629  float p0hpluszgs_selfD=0;
2631  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1;
2632  mela.computeProdP(p0hpluszgs_selfD, useConstants);
2633  cout << "p0hpluszgs_selfD: " << p0hpluszgs_selfD << '\n' << endl;
2634  }
2635 
2636  constexpr double xw = 0.23119;
2637 
2638  float p0mplus_selfD_CT=0;
2640  if (izwa==1 || izwa==0){
2641  mela.selfDHzzpcoupl[gHIGGS_VV_1][0]=0.5;
2642  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2643  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2644  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2645  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2646  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2647  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2648  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2649  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2650  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2651  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2652  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2653  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2654  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2655  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2656  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2657  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2658  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2659  mela.selfDM_Zprime=91.1876;
2660  mela.selfDGa_Zprime=2.4952;
2661  }
2662  if (izwa==2 || izwa==0){
2663  mela.selfDHwwpcoupl[gHIGGS_VV_1][0]=0.5;
2664  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2665  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2666  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2667  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2668  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2669  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2670  mela.selfDM_Wprime=80.399;
2671  mela.selfDGa_Wprime=2.085;
2672  }
2673  mela.differentiate_HWW_HZZ=true;
2674  mela.computeProdP(p0mplus_selfD_CT, useConstants);
2675  cout << "p0mplus_selfD_CT: " << p0mplus_selfD_CT << '\n' << endl;
2676 
2677  float p0hplus_selfD_CT=0;
2679  if (izwa==1 || izwa==0){
2680  mela.selfDHzzpcoupl[gHIGGS_VV_2][0]=0.5;
2681  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2682  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2683  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2684  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2685  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2686  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2687  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2688  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2689  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2690  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2691  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2692  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2693  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2694  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2695  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2696  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2697  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2698  mela.selfDM_Zprime=91.1876;
2699  mela.selfDGa_Zprime=2.4952;
2700  }
2701  if (izwa==2 || izwa==0){
2702  mela.selfDHwwpcoupl[gHIGGS_VV_2][0]=0.5;
2703  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2704  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2705  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2706  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2707  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2708  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2709  mela.selfDM_Wprime=80.399;
2710  mela.selfDGa_Wprime=2.085;
2711  }
2712  mela.differentiate_HWW_HZZ=true;
2713  mela.computeProdP(p0hplus_selfD_CT, useConstants);
2714  cout << "p0hplus_selfD_CT: " << p0hplus_selfD_CT << '\n' << endl;
2715 
2716  float p0minus_selfD_CT=0;
2718  if (izwa==1 || izwa==0){
2719  mela.selfDHzzpcoupl[gHIGGS_VV_4][0]=0.5;
2720  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2721  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2722  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2723  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2724  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2725  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2726  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2727  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2728  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2729  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2730  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2731  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2732  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2733  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2734  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2735  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2736  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2737  mela.selfDM_Zprime=91.1876;
2738  mela.selfDGa_Zprime=2.4952;
2739  }
2740  if (izwa==2 || izwa==0){
2741  mela.selfDHwwpcoupl[gHIGGS_VV_4][0]=0.5;
2742  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2743  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2744  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2745  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2746  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2747  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2748  mela.selfDM_Wprime=80.399;
2749  mela.selfDGa_Wprime=2.085;
2750  }
2751  mela.differentiate_HWW_HZZ=true;
2752  mela.computeProdP(p0minus_selfD_CT, useConstants);
2753  cout << "p0minus_selfD_CT: " << p0minus_selfD_CT << '\n' << endl;
2754 
2755  float p0mplus_selfD_VpVp=0;
2757  if (izwa==1 || izwa==0){
2758  mela.selfDHzpzpcoupl[gHIGGS_VV_1][0]=1;
2759  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2760  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2761  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2762  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2763  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2764  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2765  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2766  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2767  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2768  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2769  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2770  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2771  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2772  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2773  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2774  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2775  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2776  mela.selfDM_Zprime=91.1876;
2777  mela.selfDGa_Zprime=2.4952;
2778  }
2779  if (izwa==2 || izwa==0){
2780  mela.selfDHwpwpcoupl[gHIGGS_VV_1][0]=1;
2781  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2782  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2783  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2784  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2785  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2786  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2787  mela.selfDM_Wprime=80.399;
2788  mela.selfDGa_Wprime=2.085;
2789  }
2790  mela.differentiate_HWW_HZZ=true;
2791  mela.computeProdP(p0mplus_selfD_VpVp, useConstants);
2792  cout << "p0mplus_selfD_VpVp: " << p0mplus_selfD_VpVp << '\n' << endl;
2793 
2794  float p0hplus_selfD_VpVp=0;
2796  if (izwa==1 || izwa==0){
2797  mela.selfDHzpzpcoupl[gHIGGS_VV_2][0]=1;
2798  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2799  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2800  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2801  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2802  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2803  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2804  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2805  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2806  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2807  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2808  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2809  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2810  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2811  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2812  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2813  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2814  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2815  mela.selfDM_Zprime=91.1876;
2816  mela.selfDGa_Zprime=2.4952;
2817  }
2818  if (izwa==2 || izwa==0){
2819  mela.selfDHwpwpcoupl[gHIGGS_VV_2][0]=1;
2820  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2821  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2822  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2823  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2824  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2825  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2826  mela.selfDM_Wprime=80.399;
2827  mela.selfDGa_Wprime=2.085;
2828  }
2829  mela.differentiate_HWW_HZZ=true;
2830  mela.computeProdP(p0hplus_selfD_VpVp, useConstants);
2831  cout << "p0hplus_selfD_VpVp: " << p0hplus_selfD_VpVp << '\n' << endl;
2832 
2833  float p0minus_selfD_VpVp=0;
2835  if (izwa==1 || izwa==0){
2836  mela.selfDHzpzpcoupl[gHIGGS_VV_4][0]=1;
2837  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2838  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2839  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2840  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2841  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2842  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2843  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2844  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2845  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2846  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2847  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2848  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2849  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2850  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2851  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2852  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2853  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2854  mela.selfDM_Zprime=91.1876;
2855  mela.selfDGa_Zprime=2.4952;
2856  }
2857  if (izwa==2 || izwa==0){
2858  mela.selfDHwpwpcoupl[gHIGGS_VV_4][0]=1;
2859  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2860  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2861  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2862  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2863  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2864  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2865  mela.selfDM_Wprime=80.399;
2866  mela.selfDGa_Wprime=2.085;
2867  }
2868  mela.differentiate_HWW_HZZ=true;
2869  mela.computeProdP(p0minus_selfD_VpVp, useConstants);
2870  cout << "p0minus_selfD_VpVp: " << p0minus_selfD_VpVp << '\n' << endl;
2871 
2872  float p0minus_selfD_CT_VpVp;
2874  if (izwa==1 || izwa==0){
2875  mela.selfDHzzpcoupl[gHIGGS_VV_4][0]=0.25;
2876  mela.selfDHzpzpcoupl[gHIGGS_VV_4][0]=0.5;
2877  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=0.5*2.;
2878  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=(-xw*(-1.)-0.5)*2.;
2879  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=(-xw*(-1.)-0.5)*2.;
2880  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=(-xw*(-1.)-0.5)*2.;
2881  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=(-xw*(-1./3.)-0.5)*2.;
2882  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=(-xw*(2./3.)+0.5)*2.;
2883  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=(-xw*(-1./3.)-0.5)*2.;
2884  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=(-xw*(2./3.)+0.5)*2.;
2885  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=(-xw*(-1./3.)-0.5)*2.;
2886  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=(-xw*(-1.))*2.;
2887  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=(-xw*(-1.))*2.;
2888  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=(-xw*(-1.))*2.;
2889  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=(-xw*(-1./3.))*2.;
2890  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=(-xw*(2./3.))*2.;
2891  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=(-xw*(-1./3.))*2.;
2892  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=(-xw*(2./3.))*2.;
2893  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=(-xw*(-1./3.))*2.;
2894  mela.selfDM_Zprime=91.1876;
2895  mela.selfDGa_Zprime=2.4952;
2896  }
2897  if (izwa==2 || izwa==0){
2898  mela.selfDHwwpcoupl[gHIGGS_VV_4][0]=0.25;
2899  mela.selfDHwpwpcoupl[gHIGGS_VV_4][0]=0.5;
2900  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=sqrt(2.*(1.-xw));
2901  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=sqrt(2.*(1.-xw));
2902  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=sqrt(2.*(1.-xw));
2903  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=sqrt(2.*(1.-xw));
2904  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=sqrt(2.*(1.-xw));
2905  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=sqrt(2.*(1.-xw));
2906  mela.selfDM_Wprime=80.399;
2907  mela.selfDGa_Wprime=2.085;
2908  }
2909  mela.differentiate_HWW_HZZ=true;
2910  mela.computeProdP(p0minus_selfD_CT_VpVp, useConstants);
2911  cout << "p0minus_selfD_CT_VpVp: " << p0minus_selfD_CT_VpVp << '\n' << endl;
2912 
2913  cout << "*******************************************************" << endl;
2914  }
2915  }
2916 
2917  float costhetastar, costheta1re, costheta1im, costheta2re, costheta2im, Phi, Phi1, Q2V1, Q2V2;
2918  mela.computeVBFAngles(
2919  Q2V1,
2920  Q2V2,
2921  costheta1re,
2922  costheta2re,
2923  Phi,
2924  costhetastar,
2925  Phi1
2926  );
2927  cout << "Lab-frame VBF angles: " << costheta1re << " " << costheta2re << " " << Phi << " " << costhetastar << " " << Phi1 << " " << Q2V1 << " " << Q2V2 << endl;
2928  mela.computeVBFAngles_ComplexBoost(
2929  Q2V1,
2930  Q2V2,
2931  costheta1re, costheta1im,
2932  costheta2re, costheta2im,
2933  Phi,
2934  costhetastar,
2935  Phi1
2936  );
2937  cout << "Complex VBF angles: " << costheta1re << " " << costheta1im << " " << costheta2re << " " << costheta2im << " " << Phi << " " << costhetastar << " " << Phi1 << " " << Q2V1 << " " << Q2V2 << endl;
2938 
2939  mela.resetInputEvent();
2940  cout << "Removed..." << endl;
2941  }
2942 
2943  cout.rdbuf(coutbuf);
2944  tout.close();
2945  mela.setVerbosity(bkpverbosity);
2946 }
2947 
2948 
2949 void testME_JVBF_JHUGen_Ping(shared_ptr<Mela> melaptr=nullptr){
2950  ofstream tout(TString("testME_JVBF_JHUGen_Ping.out"));
2951  streambuf* coutbuf = cout.rdbuf();
2952  cout.rdbuf(tout.rdbuf());
2953 
2954  int erg_tev=13;
2955  float mPOLE=125.;
2956  float wPOLE=4.07e-3;
2957 
2958  TVar::VerbosityLevel verbosity = TVar::DEBUG;
2959  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
2960  Mela& mela = *melaptr;
2961  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
2962  mela.setVerbosity(verbosity);
2963  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
2964 
2965  float pingMom[8][4]={
2966  { 0, 0, 865.37881546721542, 865.37881546721542 },
2967  { 0, 0, -624.03396598421773, 624.03396598421773 },
2968  { 7.6145299215002638, -17.259247740062808, 9.4660586470659975, 21.106135714241464 },
2969  { 90.901719112641416, -69.683681833050798, 32.066319224729980, 118.94194752090492 },
2970  { 78.476352131782917, -35.264818847819797, -8.8615639484695272, 86.490881645951262 },
2971  { 191.68369742375290, -197.85205601463366, 100.99437243828194, 293.40746273989180 },
2972  { -131.59521398083137, 330.56000090294270, 437.01695094737875, 563.53440884737279 },
2973  { -237.08108460884614, -10.500196467375645, -329.33728782598945, 405.93194498307093 }
2974  };
2975  int idOrdered[8] ={ 1, 2, 11, -11, 13, -13, 1, 2 };
2977  for (unsigned int ip=0; ip<2; ip++){
2978  mothers.emplace_back(
2979  idOrdered[ip],
2980  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
2981  );
2982  }
2984  for (unsigned int ip=2; ip<6; ip++){
2985  daughters.emplace_back(
2986  idOrdered[ip],
2987  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
2988  );
2989  }
2991  associated.emplace_back(
2992  idOrdered[6],
2993  TLorentzVector(pingMom[6][0], pingMom[6][1], pingMom[6][2], pingMom[6][3])
2994  );
2995  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
2996  mela.setInputEvent(&daughters, &associated, &mothers, true);
2997 
2998  std::vector<TVar::EventScaleScheme> eventscaleschemes;
2999  for (int is=0; is<(int) TVar::nEventScaleSchemes; is++) eventscaleschemes.push_back((TVar::EventScaleScheme) is);
3000 
3001  float meval_init;
3003  mela.computeProdP(meval_init);
3004  cout << "Probability = " << meval_init << endl;
3005  mela.getPAux(meval_init);
3006  cout << "Auxiliary probability = " << meval_init << endl;
3007 
3008  mela.resetInputEvent();
3009 
3010  cout.rdbuf(coutbuf);
3011  tout.close();
3012  mela.setVerbosity(bkpverbosity);
3013 }
3014 
3015 
3016 void testME_Prop_Ping(int useMothers=0, shared_ptr<Mela> melaptr=nullptr){
3017  ofstream tout(TString("testME_Prop_Ping_")+(long)useMothers+".out");
3018  streambuf* coutbuf = cout.rdbuf();
3019  cout.rdbuf(tout.rdbuf());
3020 
3021  int erg_tev=13;
3022  float mPOLE=125.;
3023  float wPOLE=4.07e-3;
3024 
3025  TVar::VerbosityLevel verbosity = TVar::DEBUG;
3026  if (!melaptr) {
3027  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
3028  }
3029  Mela& mela = *melaptr;
3030  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
3031  mela.setVerbosity(verbosity);
3032  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
3033  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
3034  if (verbosity>=TVar::DEBUG) cout << "Mela candidate decay mode initializing" << endl;
3035  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
3036  if (verbosity>=TVar::DEBUG) cout << "Mela candidate decay mode initialized" << endl;
3037 
3038  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
3039  const int nEntries = 6;
3040  double l1_array[nEntries][4] ={
3041  { 51.374202, 25.924766, 12.290178, 42.616376 },
3042  { 51.374202, 25.924766, 12.290178, 42.616376 },
3043  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
3044  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
3045  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
3046  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
3047  };
3048  double l2_array[nEntries][4] ={
3049  { 271.875752, 70.427173, -11.138146, 261.769598 },
3050  { 21.481452, 9.489680, -9.336587, 16.858699 },
3051  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
3052  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
3053  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
3054  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
3055  };
3056  double l3_array[nEntries][4] ={
3057  { 75.823478, -16.640412, 23.246999, 70.227220 },
3058  { 75.823478, -16.640412, 23.246999, 70.227220 },
3059  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
3060  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
3061  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
3062  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
3063  };
3064  double l4_array[nEntries][4] ={
3065  { 21.481452, 9.489680, -9.336587, 16.858699 },
3066  { 271.875752, 70.427173, -11.138146, 261.769598 },
3067  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
3068  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
3069  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
3070  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
3071  };
3072 
3073  GenLep1Id=13;
3074  GenLep2Id=-13;
3075  GenLep3Id=11;
3076  GenLep4Id=-11;
3077 
3078  for (int ev = 2; ev < 3; ev++){
3079  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
3080  TLorentzVector pOrdered[4];
3081  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
3082  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
3083  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
3084  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
3085  SimpleParticleCollection_t daughters_ZZ;
3086  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
3087 
3088  // Some gymnastics to get pseudo-mothers for these events
3089  TLorentzVector pTotal = pOrdered[0]+pOrdered[1]+pOrdered[2]+pOrdered[3];
3090  TLorentzVector pTotal_dummy=pTotal;
3091  TLorentzVector pTotal_perp(pTotal.X(), pTotal.Y(), 0, pTotal.T());
3092  pTotal_dummy.Boost(-pTotal_perp.BoostVector());
3093  TLorentzVector pMothers[2];
3094  pMothers[0].SetXYZT(0, 0, (pTotal_dummy.Z()+pTotal_dummy.T())/2., (pTotal_dummy.Z()+pTotal_dummy.T())/2.);
3095  pMothers[1].SetXYZT(0, 0, (pTotal_dummy.Z()-pTotal_dummy.T())/2., (-pTotal_dummy.Z()+pTotal_dummy.T())/2.);
3096  for (int im=0; im<2; im++) pMothers[im].Boost(pTotal_perp.BoostVector());
3097  SimpleParticleCollection_t mothers_QQB;
3098  for (unsigned int im=0; im<2; im++) mothers_QQB.push_back(SimpleParticle_t(1-2*im, pMothers[im]));
3099  SimpleParticleCollection_t mothers_GG;
3100  for (unsigned int im=0; im<2; im++) mothers_GG.push_back(SimpleParticle_t(21, pMothers[im]));
3101  SimpleParticleCollection_t* mothersPtr=0;
3102  if (useMothers==1) mothersPtr=&mothers_GG;
3103  else if (useMothers==2) mothersPtr=&mothers_QQB;
3104 
3105  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
3106  mela.setInputEvent(&daughters_ZZ, (SimpleParticleCollection_t*)0, mothersPtr, (mothersPtr!=0));
3107 
3108  int cindex;
3109  /***** ZZ *****/
3110  cindex=0;
3111  mela.setCurrentCandidateFromIndex(cindex);
3112 
3113  double mH=500.;
3114  cout << "Computing Prop(500 GeV) at mass=" << mela.getCurrentCandidate()->m() << endl;
3115  for (int ps=0; ps<=3; ps++){
3116  /*
3117  NoPropagator=0,
3118  RunningWidth=1,
3119  FixedWidth=2,
3120  CPS=3
3121  */
3122  float prop;
3123  mela.setMelaHiggsMassWidth(mH, -1, 0);
3124  mela.getXPropagator((TVar::ResonancePropagatorScheme)ps, prop);
3125  cout << "prop[" << ps << "]: " << prop << endl;
3126  }
3127 
3128  if (verbosity>=TVar::DEBUG){
3129  cout << "Removing Mela candidates\nSummary:" << endl;
3130  for (int ic=0; ic<mela.getNCandidates(); ic++){
3131  cout << "Candidate " << ic << endl;
3132  mela.setCurrentCandidateFromIndex(ic);
3133  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
3134  }
3135  cout << endl;
3136  }
3137  mela.resetInputEvent();
3138  cout << "Removed..." << endl;
3139  }
3140 
3141  cout.rdbuf(coutbuf);
3142  tout.close();
3143  mela.setVerbosity(bkpverbosity);
3144 }
3145 
3146 
3147 void testME_ProdDec_MCFM_Ordering(int iSel, int jSel, int rSel, int sSel){
3148  int order[2];
3149  TMCFMUtils::AssociatedParticleOrdering_QQVVQQAny(iSel, jSel, rSel, sSel, order);
3150  if (order[0]!=-1) cout << "testME_ProdDec_MCFM_Ordering::Order of particles should be "
3151  << order[0] << " "
3152  << order[1] << endl;
3153 }
3154 
3155 void testME_ProdDec_MCFM_JHUGen_WBFZZWW_Comparison_Ping(int motherflavor=0, int isZZWW=0 /*1==ZZ, 2==WW*/, int vbfvhchannel=0 /*0==VBF, 1==HadVH, 2==LepVH*/, int decZZWW=1 /*1==ZZ, 2==WW*/, int hasInterf=0 /*0==2l2l, 1==4l*/, shared_ptr<Mela> melaptr=nullptr){
3156  TString outname;
3157  int ZZWWdec_onevertexflag;
3158  if (decZZWW==1){
3159  outname = Form("testME_ProdDec_MCFM_JHUGen_WBFZZ_Comparison_Ping_%i_%i_%i_%s.out", motherflavor, isZZWW, vbfvhchannel, (hasInterf ? "4l" : "2l2l"));
3160  ZZWWdec_onevertexflag=2;
3161  }
3162  else if(decZZWW==2){
3163  outname = Form("testME_ProdDec_MCFM_JHUGen_WBFWW_Comparison_Ping_%i_%i_%i.out", motherflavor, isZZWW, vbfvhchannel);
3164  ZZWWdec_onevertexflag=1;
3165  }
3166  else return;
3167  if (hasInterf==1 && decZZWW!=1) return;
3168 
3169  struct mcfmme{
3170  float proddecme;
3171  double mearray[nmsq][nmsq];
3172  mcfmme(){
3173  proddecme=0;
3174  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]=0; }
3175  }
3176  void add(const mcfmme& other){
3177  proddecme+=other.proddecme;
3178  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]+=(other.mearray)[ii][jj]; }
3179  }
3180  void multiplyarray(const float val){
3181  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]*=val; }
3182  }
3183  void printarray(){
3184  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) cout << '\t' << mearray[ii][jj]; cout << endl; }
3185  }
3186  };
3187  struct jhume{
3188  float prodme;
3189  float decme;
3190  float proddecme;
3191  double mearray[nmsq][nmsq];
3192  jhume(){
3193  prodme=0;
3194  decme=0;
3195  proddecme=0;
3196  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]=0; }
3197  }
3198  void multiplyarray(const float val){
3199  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]*=val; }
3200  }
3201  void printarray(){
3202  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) cout << '\t' << mearray[ii][jj]; cout << endl; }
3203  }
3204  };
3205 
3206  int erg_tev=13;
3207  float mPOLE=125.0;
3208  float wPOLE=4.07e-3;
3209 
3210  TVar::VerbosityLevel verbosity = TVar::ERROR;
3211 
3212  bool doEval=false;
3213  int idMother[2]={ 0 };
3214  if (vbfvhchannel<=1){
3215  // VBF ZZ(+)WW
3216  if (motherflavor==0){
3217  doEval = true;
3218  }
3219  else if (motherflavor==1){
3220  idMother[0]=2; idMother[1]=1;
3221  doEval =
3222  (isZZWW==1 && vbfvhchannel==0) ||
3223  (isZZWW==2 && vbfvhchannel==0);
3224  }
3225  else if (motherflavor==2){
3226  idMother[0]=-2; idMother[1]=-1;
3227  doEval =
3228  (isZZWW==1 && vbfvhchannel==0) ||
3229  (isZZWW==2 && vbfvhchannel==0);
3230  }
3231  // VBF ZZ-only(+)WH
3232  else if (motherflavor==3){
3233  idMother[0]=2; idMother[1]=-1;
3234  doEval =
3235  (isZZWW==1 && vbfvhchannel==0) ||
3236  (isZZWW==2 && vbfvhchannel>=1) ||
3237  (isZZWW==0 && vbfvhchannel==0) ||
3238  (isZZWW==0 && vbfvhchannel>=1);
3239  }
3240  else if (motherflavor==4){
3241  idMother[0]=-2; idMother[1]=1;
3242  doEval =
3243  (isZZWW==1 && vbfvhchannel==0) ||
3244  (isZZWW==2 && vbfvhchannel>=1) ||
3245  (isZZWW==0 && vbfvhchannel==0) ||
3246  (isZZWW==0 && vbfvhchannel==1);
3247  }
3248  // VBF ZZ(+)ZH or WW(+)ZH
3249  else if (motherflavor==5){
3250  idMother[0]=2; idMother[1]=-2;
3251  doEval =
3252  (isZZWW==1 && vbfvhchannel==0) ||
3253  (isZZWW==2 && vbfvhchannel==0) ||
3254  (isZZWW==1 && vbfvhchannel>=1);
3255  }
3256  else if (motherflavor==6){
3257  idMother[0]=-2; idMother[1]=2;
3258  doEval =
3259  (isZZWW==1 && vbfvhchannel==0) ||
3260  (isZZWW==2 && vbfvhchannel==0) ||
3261  (isZZWW==1 && vbfvhchannel>=1);
3262  }
3263  else if (motherflavor==7){
3264  idMother[0]=1; idMother[1]=-1;
3265  doEval =
3266  (isZZWW==1 && vbfvhchannel==0) ||
3267  (isZZWW==2 && vbfvhchannel==0) ||
3268  (isZZWW==1 && vbfvhchannel>=1);
3269  }
3270  else if (motherflavor==8){
3271  idMother[0]=-1; idMother[1]=1;
3272  doEval =
3273  (isZZWW==1 && vbfvhchannel==0) ||
3274  (isZZWW==2 && vbfvhchannel==0) ||
3275  (isZZWW==1 && vbfvhchannel>=1);
3276  }
3277  // Extra pieces
3278  // VBF ZZ(+)WW
3279  else if (motherflavor==9){
3280  idMother[0]=4; idMother[1]=3;
3281  doEval =
3282  (isZZWW==1 && vbfvhchannel==0) ||
3283  (isZZWW==2 && vbfvhchannel==0);
3284  }
3285  else if (motherflavor==10){
3286  idMother[0]=4; idMother[1]=1;
3287  doEval =
3288  (isZZWW==1 && vbfvhchannel==0) ||
3289  (isZZWW==2 && vbfvhchannel==0);
3290  }
3291  else if (motherflavor==11){
3292  idMother[0]=2; idMother[1]=3;
3293  doEval =
3294  (isZZWW==1 && vbfvhchannel==0) ||
3295  (isZZWW==2 && vbfvhchannel==0);
3296  }
3297  else if (motherflavor==12){
3298  idMother[0]=-4; idMother[1]=-3;
3299  doEval =
3300  (isZZWW==1 && vbfvhchannel==0) ||
3301  (isZZWW==2 && vbfvhchannel==0);
3302  }
3303  else if (motherflavor==13){
3304  idMother[0]=-4; idMother[1]=-1;
3305  doEval =
3306  (isZZWW==1 && vbfvhchannel==0) ||
3307  (isZZWW==2 && vbfvhchannel==0);
3308  }
3309  else if (motherflavor==14){
3310  idMother[0]=-2; idMother[1]=-3;
3311  doEval =
3312  (isZZWW==1 && vbfvhchannel==0) ||
3313  (isZZWW==2 && vbfvhchannel==0);
3314  }
3315  // VBF ZZ-only(+)WH
3316  else if (motherflavor==15){
3317  idMother[0]=4; idMother[1]=-3;
3318  doEval =
3319  (isZZWW==1 && vbfvhchannel==0) ||
3320  (isZZWW==2 && vbfvhchannel>=1) ||
3321  (isZZWW==0 && vbfvhchannel==0) ||
3322  (isZZWW==0 && vbfvhchannel>=1);
3323  }
3324  else if (motherflavor==16){
3325  idMother[0]=4; idMother[1]=-1;
3326  doEval =
3327  (isZZWW==1 && vbfvhchannel==0) ||
3328  (isZZWW==2 && vbfvhchannel>=1) ||
3329  (isZZWW==0 && vbfvhchannel==0) ||
3330  (isZZWW==0 && vbfvhchannel>=1);
3331  }
3332  else if (motherflavor==17){
3333  idMother[0]=2; idMother[1]=-3;
3334  doEval =
3335  (isZZWW==1 && vbfvhchannel==0) ||
3336  (isZZWW==2 && vbfvhchannel>=1) ||
3337  (isZZWW==0 && vbfvhchannel==0) ||
3338  (isZZWW==0 && vbfvhchannel>=1);
3339  }
3340  else if (motherflavor==18){
3341  idMother[0]=-4; idMother[1]=3;
3342  doEval =
3343  (isZZWW==1 && vbfvhchannel==0) ||
3344  (isZZWW==2 && vbfvhchannel>=1) ||
3345  (isZZWW==0 && vbfvhchannel==0) ||
3346  (isZZWW==0 && vbfvhchannel==1);
3347  }
3348  else if (motherflavor==19){
3349  idMother[0]=-4; idMother[1]=1;
3350  doEval =
3351  (isZZWW==1 && vbfvhchannel==0) ||
3352  (isZZWW==2 && vbfvhchannel>=1) ||
3353  (isZZWW==0 && vbfvhchannel==0) ||
3354  (isZZWW==0 && vbfvhchannel==1);
3355  }
3356  else if (motherflavor==20){
3357  idMother[0]=-2; idMother[1]=3;
3358  doEval =
3359  (isZZWW==1 && vbfvhchannel==0) ||
3360  (isZZWW==2 && vbfvhchannel>=1) ||
3361  (isZZWW==0 && vbfvhchannel==0) ||
3362  (isZZWW==0 && vbfvhchannel==1);
3363  }
3364  // VBF ZZ(+)ZH or WW(+)ZH
3365  else if (motherflavor==21){
3366  idMother[0]=4; idMother[1]=-4;
3367  doEval =
3368  (isZZWW==1 && vbfvhchannel==0) ||
3369  (isZZWW==2 && vbfvhchannel==0) ||
3370  (isZZWW==1 && vbfvhchannel>=1);
3371  }
3372  else if (motherflavor==22){
3373  idMother[0]=-4; idMother[1]=4;
3374  doEval =
3375  (isZZWW==1 && vbfvhchannel==0) ||
3376  (isZZWW==2 && vbfvhchannel==0) ||
3377  (isZZWW==1 && vbfvhchannel>=1);
3378  }
3379  else if (motherflavor==23){
3380  idMother[0]=3; idMother[1]=-3;
3381  doEval =
3382  (isZZWW==1 && vbfvhchannel==0) ||
3383  (isZZWW==2 && vbfvhchannel==0) ||
3384  (isZZWW==1 && vbfvhchannel>=1);
3385  }
3386  else if (motherflavor==24){
3387  idMother[0]=-3; idMother[1]=3;
3388  doEval =
3389  (isZZWW==1 && vbfvhchannel==0) ||
3390  (isZZWW==2 && vbfvhchannel==0) ||
3391  (isZZWW==1 && vbfvhchannel>=1);
3392  }
3393  else if (motherflavor==25){
3394  idMother[0]=5; idMother[1]=-5;
3395  doEval =
3396  (isZZWW==1 && vbfvhchannel==0) ||
3397  (isZZWW==2 && vbfvhchannel==0) ||
3398  (isZZWW==1 && vbfvhchannel>=1);
3399  }
3400  else if (motherflavor==26){
3401  idMother[0]=-5; idMother[1]=5;
3402  doEval =
3403  (isZZWW==1 && vbfvhchannel==0) ||
3404  (isZZWW==2 && vbfvhchannel==0) ||
3405  (isZZWW==1 && vbfvhchannel>=1);
3406  }
3407  else if (motherflavor<=31){
3408  idMother[0]=-(motherflavor-26); idMother[1]=0;
3409  doEval =
3410  (isZZWW==1 && vbfvhchannel==0) ||
3411  (isZZWW==2 && vbfvhchannel==0) ||
3412  (isZZWW==1 && vbfvhchannel>=1) ||
3413  (isZZWW==2 && vbfvhchannel>=1);
3414  }
3415  else if (motherflavor<=36){
3416  idMother[0]=(motherflavor-31); idMother[1]=0;
3417  doEval =
3418  (isZZWW==1 && vbfvhchannel==0) ||
3419  (isZZWW==2 && vbfvhchannel==0) ||
3420  (isZZWW==1 && vbfvhchannel>=1) ||
3421  (isZZWW==2 && vbfvhchannel>=1);
3422  }
3423  }
3424  else if (vbfvhchannel==2){
3425  // VBF ZZ-only(+)WH
3426  if (motherflavor==3){
3427  idMother[0]=14; idMother[1]=-13;
3428  doEval =
3429  (isZZWW==2 && vbfvhchannel>=1) ||
3430  (isZZWW==0 && vbfvhchannel>=1);
3431  }
3432  else if (motherflavor==4){
3433  idMother[0]=-14; idMother[1]=13;
3434  doEval =
3435  (isZZWW==2 && vbfvhchannel>=1) ||
3436  (isZZWW==0 && vbfvhchannel>=1);
3437  }
3438  // VBF ZZ(+)ZH or WW(+)ZH
3439  else if (motherflavor==5){
3440  idMother[0]=14; idMother[1]=-14;
3441  doEval =
3442  (isZZWW==1 && vbfvhchannel>=1);
3443  }
3444  else if (motherflavor==6){
3445  idMother[0]=-14; idMother[1]=14;
3446  doEval =
3447  (isZZWW==1 && vbfvhchannel>=1);
3448  }
3449  else if (motherflavor==7){
3450  idMother[0]=13; idMother[1]=-13;
3451  doEval =
3452  (isZZWW==1 && vbfvhchannel>=1);
3453  }
3454  else if (motherflavor==8){
3455  idMother[0]=-13; idMother[1]=13;
3456  doEval =
3457  (isZZWW==1 && vbfvhchannel>=1);
3458  }
3459  }
3460 
3462  if (vbfvhchannel==0) prod=TVar::JJVBF_S;
3463  else if (vbfvhchannel==1){
3464  if (
3465  (idMother[0]==-idMother[1] && idMother[0]!=0)
3466  ||
3467  (idMother[0]==-idMother[1] && idMother[0]==0 && isZZWW==1)
3468  ||
3469  (idMother[0]!=-idMother[1] && (idMother[0]==0 || idMother[1]==0) && isZZWW==1)
3470  ) prod=TVar::Had_ZH_S;
3471  else if (
3472  (TMath::Sign(1, idMother[0])==-TMath::Sign(1, idMother[1]) && abs(idMother[0])%2!=abs(idMother[1])%2)
3473  ||
3474  (idMother[0]==-idMother[1] && idMother[0]==0 && isZZWW==2)
3475  ||
3476  ((idMother[0]==0 || idMother[1]==0) && isZZWW==2)
3477  ) prod=TVar::Had_WH_S;
3478  else doEval=false;
3479  }
3480  else if (vbfvhchannel==2){
3481  if (idMother[0]==-idMother[1] && idMother[0]!=0) prod=TVar::Lep_ZH_S;
3482  else if (TMath::Sign(1, idMother[0])==-TMath::Sign(1, idMother[1]) && abs(idMother[0])%2!=abs(idMother[1])%2) prod=TVar::Lep_WH_S;
3483  else doEval=false;
3484  }
3485  else doEval=false;
3486 
3487  if (doEval){
3488  ofstream tout(outname.Data());
3489  streambuf* coutbuf = cout.rdbuf();
3490  cout.rdbuf(tout.rdbuf());
3491 
3492  if (!melaptr) {
3493  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
3494  }
3495  Mela& mela = *melaptr;
3496  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
3497  mela.setVerbosity(verbosity);
3498 
3499  jhume p_prod_0mplus_dec_0mplus_VAJHU;
3500  jhume p_prod_0hplus_dec_0hplus_VAJHU;
3501  jhume p_prod_fa2_dec_fa2_VAJHU;
3502  jhume p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU;
3503  jhume p_prod_0minus_dec_0minus_VAJHU;
3504  jhume p_prod_fa3_dec_fa3_VAJHU;
3505  jhume p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU;
3506  jhume p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU;
3507  jhume p_prod_0mplusL2_dec_0mplusL2_VAJHU;
3508  jhume p_prod_fL2_dec_fL2_VAJHU;
3509  jhume p_prod_0minusZA_dec_0minusZA_VAJHU;
3510  jhume p_prod_fa3ZA_dec_fa3ZA_VAJHU;
3511  jhume p_prod_0minusAA_dec_0minusAA_VAJHU;
3512  jhume p_prod_fa3AA_dec_fa3AA_VAJHU;
3513 
3514  mcfmme p_bkg_VAMCFM, p_bkg_VAMCFM_rssum;
3515  mcfmme p_prod_0mplus_dec_0mplus_VAMCFM;
3516  mcfmme p_prod_0hplus_dec_0hplus_VAMCFM;
3517  mcfmme p_prod_0minus_dec_0minus_VAMCFM;
3518  mcfmme p_prod_0mplusL2_dec_0mplusL2_VAMCFM;
3519  mcfmme p_prod_fL2_dec_fL2_VAMCFM;
3520  mcfmme p_prod_fa2_dec_fa2_VAMCFM;
3521  mcfmme p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAMCFM;
3522  mcfmme p_prod_fa3_dec_fa3_VAMCFM;
3523  mcfmme p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAMCFM;
3524  mcfmme p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAMCFM;
3525  mcfmme p_prod_0minusZA_dec_0minusZA_VAMCFM;
3526  mcfmme p_prod_fa3ZA_dec_fa3ZA_VAMCFM;
3527  mcfmme p_prod_0minusAA_dec_0minusAA_VAMCFM;
3528  mcfmme p_prod_fa3AA_dec_fa3AA_VAMCFM;
3529 
3530  float mzz = 0;
3531  float mjj = 0;
3532  float mjjzz = 0;
3533  float sysZ = 0.;
3534 
3535  float costhetastar=0;
3536  float costheta1=0;
3537  float costheta2=0;
3538  float Phi=0;
3539  float Phi1=0;
3540  float Q2V1=0;
3541  float Q2V2=0;
3542  float mVstar=0, mV=0;
3543 
3544  float pingMom[8][4]={
3545  { 0, 0, 865.37881546721542, 865.37881546721542 },
3546  { 0, 0, -624.03396598421773, 624.03396598421773 },
3547  { 7.6145299215002638, -17.259247740062808, 9.4660586470659975, 21.106135714241464 },
3548  { 90.901719112641416, -69.683681833050798, 32.066319224729980, 118.94194752090492 },
3549  { 78.476352131782917, -35.264818847819797, -8.8615639484695272, 86.490881645951262 },
3550  { 191.68369742375290, -197.85205601463366, 100.99437243828194, 293.40746273989180 },
3551  { -131.59521398083137, 330.56000090294270, 437.01695094737875, 563.53440884737279 },
3552  { -237.08108460884614, -10.500196467375645, -329.33728782598945, 405.93194498307093 }
3553  };
3554 
3555  int GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
3556  if (decZZWW==1){
3557  GenLep1Id=13;
3558  GenLep2Id=-13;
3559  if (hasInterf==0){
3560  GenLep3Id=11;
3561  GenLep4Id=-11;
3562  }
3563  else{
3564  GenLep3Id=GenLep1Id;
3565  GenLep4Id=GenLep2Id;
3566  }
3567  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
3568  }
3569  else{
3570  GenLep1Id=13;
3571  GenLep2Id=-14;
3572  GenLep3Id=12;
3573  GenLep4Id=-11;
3574  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
3575  }
3576  int idOrdered[4] ={ GenLep1Id, GenLep2Id, GenLep3Id, GenLep4Id };
3577 
3579  for (unsigned int ip=0; ip<2; ip++){
3580  mothers.push_back(
3582  0,
3583  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
3584  )
3585  );
3586  }
3588  for (unsigned int ip=2; ip<6; ip++){
3589  daughters.push_back(
3591  idOrdered[ip-2],
3592  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
3593  )
3594  );
3595  }
3597  for (unsigned int ip=6; ip<8; ip++){
3598  associated.push_back(
3600  idMother[ip-6], // Is this wrong? No, not really. We want to check all initial particles.
3601  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
3602  )
3603  );
3604  }
3605  mjj = (associated.at(0).second+associated.at(1).second).M();
3606  mzz = (daughters.at(0).second+daughters.at(1).second+daughters.at(2).second+daughters.at(3).second).M();
3607 
3608  mela.setInputEvent(&daughters, &associated, &mothers, true);
3609 
3610  if (mothers.size()>1){
3611  if (vbfvhchannel==0) TUtil::computeVBFAngles(
3612  costhetastar,
3613  costheta1,
3614  costheta2,
3615  Phi,
3616  Phi1,
3617  Q2V1,
3618  Q2V2,
3619 
3620  daughters.at(0).second, daughters.at(0).first,
3621  daughters.at(1).second, daughters.at(1).first,
3622  daughters.at(2).second, daughters.at(2).first,
3623  daughters.at(3).second, daughters.at(3).first,
3624 
3625  associated.at(0).second, associated.at(0).first,
3626  associated.at(1).second, associated.at(1).first,
3627 
3628  &(mothers.at(0).second), mothers.at(0).first,
3629  &(mothers.at(1).second), mothers.at(1).first
3630  );
3632  costhetastar,
3633  costheta1,
3634  costheta2,
3635  Phi,
3636  Phi1,
3637  mVstar,
3638  mV,
3639 
3640  daughters.at(0).second, daughters.at(0).first,
3641  daughters.at(1).second, daughters.at(1).first,
3642  daughters.at(2).second, daughters.at(2).first,
3643  daughters.at(3).second, daughters.at(3).first,
3644 
3645  associated.at(0).second, associated.at(0).first,
3646  associated.at(1).second, associated.at(1).first,
3647 
3648  &(mothers.at(0).second), mothers.at(0).first,
3649  &(mothers.at(1).second), mothers.at(1).first
3650  );
3651  }
3652  else{
3653  if (vbfvhchannel==0) TUtil::computeVBFAngles(
3654  costhetastar,
3655  costheta1,
3656  costheta2,
3657  Phi,
3658  Phi1,
3659  Q2V1,
3660  Q2V2,
3661 
3662  daughters.at(0).second, daughters.at(0).first,
3663  daughters.at(1).second, daughters.at(1).first,
3664  daughters.at(2).second, daughters.at(2).first,
3665  daughters.at(3).second, daughters.at(3).first,
3666 
3667  associated.at(0).second, associated.at(0).first,
3668  associated.at(1).second, associated.at(1).first
3669  );
3671  costhetastar,
3672  costheta1,
3673  costheta2,
3674  Phi,
3675  Phi1,
3676  mVstar,
3677  mV,
3678 
3679  daughters.at(0).second, daughters.at(0).first,
3680  daughters.at(1).second, daughters.at(1).first,
3681  daughters.at(2).second, daughters.at(2).first,
3682  daughters.at(3).second, daughters.at(3).first,
3683 
3684  associated.at(0).second, associated.at(0).first,
3685  associated.at(1).second, associated.at(1).first
3686  );
3687  }
3688 
3689  // Back-up CKM
3690  double bkpvckm_ud=TUtil::GetCKMElement(2, 1);
3691  double bkpvckm_us=TUtil::GetCKMElement(2, 3);
3692  double bkpvckm_ub=TUtil::GetCKMElement(2, 5);
3693  double bkpvckm_cd=TUtil::GetCKMElement(4, 1);
3694  double bkpvckm_cs=TUtil::GetCKMElement(4, 3);
3695  double bkpvckm_cb=TUtil::GetCKMElement(4, 5);
3696  double bkpvckm_ts=TUtil::GetCKMElement(6, 1);
3697  double bkpvckm_tb=TUtil::GetCKMElement(6, 3);
3698  double bkpvckm_td=TUtil::GetCKMElement(6, 5);
3699  // Set CKM to be diagonal for this test
3700  double invckm_ud=1, invckm_us=0, invckm_cd=0, invckm_cs=1, invckm_ts=0, invckm_tb=1, invckm_ub=0, invckm_cb=0, invckm_td=0;
3701  TUtil::SetCKMElements(&invckm_ud, &invckm_us, &invckm_cd, &invckm_cs, &invckm_ts, &invckm_tb, &invckm_ub, &invckm_cb, &invckm_td);
3702 
3703  /***** JHUGen *****/
3705 
3706  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3707  mela.computeP(p_prod_0mplus_dec_0mplus_VAJHU.decme, false);
3708 
3709  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
3710  mela.computeP(p_prod_0hplus_dec_0hplus_VAJHU.decme, false);
3711 
3712  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3713  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
3714  mela.computeP(p_prod_fa2_dec_fa2_VAJHU.decme, false);
3715 
3716  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3717  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1;
3718  mela.computeP(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.decme, false);
3719 
3720  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
3721  mela.computeP(p_prod_0minus_dec_0minus_VAJHU.decme, false);
3722 
3723  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3724  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
3725  mela.computeP(p_prod_fa3_dec_fa3_VAJHU.decme, false);
3726 
3727  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3728  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1;
3729  mela.computeP(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.decme, false);
3730 
3731  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3732  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=-1;
3733  mela.computeP(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.decme, false);
3734 
3735  if (decZZWW==1){
3736  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3737  mela.computeP(p_prod_0minusZA_dec_0minusZA_VAJHU.decme, false);
3738 
3739  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3740  mela.computeP(p_prod_0minusAA_dec_0minusAA_VAJHU.decme, false);
3741 
3742  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3743  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3744  mela.computeP(p_prod_fa3ZA_dec_fa3ZA_VAJHU.decme, false);
3745 
3746  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3747  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3748  mela.computeP(p_prod_fa3AA_dec_fa3AA_VAJHU.decme, false);
3749 
3750  p_prod_0mplusL2_dec_0mplusL2_VAJHU.decme=p_prod_0mplus_dec_0mplus_VAJHU.decme;
3751  p_prod_fL2_dec_fL2_VAJHU.decme=p_prod_0mplus_dec_0mplus_VAJHU.decme;
3752  }
3753  else{
3754  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000;
3755  mela.computeP(p_prod_0mplusL2_dec_0mplusL2_VAJHU.decme, false);
3756 
3757  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3758  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000;
3759  mela.computeP(p_prod_fL2_dec_fL2_VAJHU.decme, false);
3760 
3761  p_prod_0minusZA_dec_0minusZA_VAJHU.decme=p_prod_0mplus_dec_0mplus_VAJHU.decme;
3762  p_prod_0minusAA_dec_0minusAA_VAJHU.decme=p_prod_0mplus_dec_0mplus_VAJHU.decme;
3763  p_prod_fa3ZA_dec_fa3ZA_VAJHU.decme=p_prod_0mplus_dec_0mplus_VAJHU.decme;
3764  p_prod_fa3AA_dec_fa3AA_VAJHU.decme=p_prod_0mplus_dec_0mplus_VAJHU.decme;
3765  }
3766 
3767  bool computeL2WWprod=(isZZWW==2 || (decZZWW==2 && vbfvhchannel==0)); // This flag turns on Lambda2 couplings to check W+/W- - asymmetric couplings
3768  bool computeJHUZA=true;
3769  if (vbfvhchannel>=1){
3770  if (isZZWW==2 && decZZWW==1){ // WH->ZZ
3771  }
3772  else if (isZZWW==1 && decZZWW==2){ // ZH->WW
3773  }
3774  else if (isZZWW==1 && decZZWW==1){ // ZH->ZZ
3775  }
3776  else computeJHUZA=false;
3777  }
3778  else{
3779  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
3780  }
3781  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
3782  }
3783  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
3784  }
3785  else computeJHUZA=false;
3786  }
3787  if (vbfvhchannel==0){
3789  cout << "JHUGen production chosen: " << TVar::ProductionName(TVar::JJVBF) << endl;
3790 
3791  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3792  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3793  mela.computeProdP(p_prod_0mplus_dec_0mplus_VAJHU.prodme, false);
3794  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplus_dec_0mplus_VAJHU.mearray);
3795 
3796  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3797  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_2][0]=1; mela.differentiate_HWW_HZZ=true; }
3798  mela.computeProdP(p_prod_0hplus_dec_0hplus_VAJHU.prodme, false);
3799  mela.getIORecord()->getUnweightedMEArray(p_prod_0hplus_dec_0hplus_VAJHU.mearray);
3800 
3801  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3802  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_2][0]=1; mela.differentiate_HWW_HZZ=true; }
3803  mela.computeProdP(p_prod_fa2_dec_fa2_VAJHU.prodme, false);
3804  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_dec_fa2_VAJHU.mearray);
3805 
3806  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3807  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_2][1]=1; mela.differentiate_HWW_HZZ=true; }
3808  mela.computeProdP(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.prodme, false);
3809  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.mearray);
3810 
3811  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3812  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
3813  mela.computeProdP(p_prod_0minus_dec_0minus_VAJHU.prodme, false);
3814  mela.getIORecord()->getUnweightedMEArray(p_prod_0minus_dec_0minus_VAJHU.mearray);
3815 
3816  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3817  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
3818  mela.computeProdP(p_prod_fa3_dec_fa3_VAJHU.prodme, false);
3819  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_dec_fa3_VAJHU.mearray);
3820 
3821  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3822  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][1]=1; mela.differentiate_HWW_HZZ=true; }
3823  mela.computeProdP(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.prodme, false);
3824  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.mearray);
3825 
3826  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=-1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3827  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][1]=-1; mela.differentiate_HWW_HZZ=true; }
3828  mela.computeProdP(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.prodme, false);
3829  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.mearray);
3830 
3831  if (computeL2WWprod){
3832  if (decZZWW==2 && isZZWW==1) mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3833  mela.selfDHwwcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000; mela.differentiate_HWW_HZZ=true;
3834  mela.computeProdP(p_prod_0mplusL2_dec_0mplusL2_VAJHU.prodme, false);
3835  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplusL2_dec_0mplusL2_VAJHU.mearray);
3836 
3837  if (decZZWW==2 && isZZWW==1) mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3838  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000; mela.differentiate_HWW_HZZ=true;
3839  mela.computeProdP(p_prod_fL2_dec_fL2_VAJHU.prodme, false);
3840  mela.getIORecord()->getUnweightedMEArray(p_prod_fL2_dec_fL2_VAJHU.mearray);
3841  }
3842  else{
3843  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3844  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3845  mela.computeProdP(p_prod_0mplusL2_dec_0mplusL2_VAJHU.prodme, false);
3846  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplusL2_dec_0mplusL2_VAJHU.mearray);
3847 
3848  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3849  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3850  mela.computeProdP(p_prod_fL2_dec_fL2_VAJHU.prodme, false);
3851  mela.getIORecord()->getUnweightedMEArray(p_prod_fL2_dec_fL2_VAJHU.mearray);
3852  }
3853  if (computeJHUZA){ // Compute contributions with Z/A
3854  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
3855  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3856  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3857  mela.differentiate_HWW_HZZ=true;
3858  }
3859  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
3860  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3861  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3862  mela.differentiate_HWW_HZZ=true;
3863  }
3864  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
3865  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3866  mela.differentiate_HWW_HZZ=true;
3867  }
3868  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3869  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3870  mela.computeProdP(p_prod_0minusZA_dec_0minusZA_VAJHU.prodme, false);
3871  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusZA_dec_0minusZA_VAJHU.mearray);
3872 
3873  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
3874  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3875  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3876  mela.differentiate_HWW_HZZ=true;
3877  }
3878  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
3879  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3880  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3881  mela.differentiate_HWW_HZZ=true;
3882  }
3883  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
3884  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3885  mela.differentiate_HWW_HZZ=true;
3886  }
3887  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3888  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3889  mela.computeProdP(p_prod_0minusAA_dec_0minusAA_VAJHU.prodme, false);
3890  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusAA_dec_0minusAA_VAJHU.mearray);
3891 
3892  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
3893  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3894  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3895  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3896  mela.differentiate_HWW_HZZ=true;
3897  }
3898  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
3899  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3900  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3901  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3902  mela.differentiate_HWW_HZZ=true;
3903  }
3904  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
3905  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3906  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
3907  mela.differentiate_HWW_HZZ=true;
3908  }
3909  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3910  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3911  mela.computeProdP(p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme, false);
3912  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3ZA_dec_fa3ZA_VAJHU.mearray);
3913 
3914  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
3915  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3916  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3917  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3918  mela.differentiate_HWW_HZZ=true;
3919  }
3920  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
3921  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
3922  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3923  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3924  mela.differentiate_HWW_HZZ=true;
3925  }
3926  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
3927  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3928  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
3929  mela.differentiate_HWW_HZZ=true;
3930  }
3931  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3932  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3933  mela.computeProdP(p_prod_fa3AA_dec_fa3AA_VAJHU.prodme, false);
3934  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3AA_dec_fa3AA_VAJHU.mearray);
3935  }
3936  else{ // No Z/A contributions, compute SM MEs
3937  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3938  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3939  mela.computeProdP(p_prod_0minusZA_dec_0minusZA_VAJHU.prodme, false);
3940  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusZA_dec_0minusZA_VAJHU.mearray);
3941 
3942  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3943  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3944  mela.computeProdP(p_prod_0minusAA_dec_0minusAA_VAJHU.prodme, false);
3945  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusAA_dec_0minusAA_VAJHU.mearray);
3946 
3947  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3948  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3949  mela.computeProdP(p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme, false);
3950  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3ZA_dec_fa3ZA_VAJHU.mearray);
3951 
3952  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
3953  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
3954  mela.computeProdP(p_prod_fa3AA_dec_fa3AA_VAJHU.prodme, false);
3955  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3AA_dec_fa3AA_VAJHU.mearray);
3956  }
3957  }
3958  else{
3960  if (prod==TVar::Had_ZH_S){
3962  cout << "JHUGen production chosen: " << TVar::ProductionName(TVar::Had_ZH) << endl;
3963  }
3964  else{
3966  cout << "JHUGen production chosen: " << TVar::ProductionName(TVar::Lep_ZH) << endl;
3967  }
3968 
3969  if (isZZWW!=2) mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
3970  else mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0;
3971  mela.computeProdP(p_prod_0mplus_dec_0mplus_VAJHU.prodme, false);
3972  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplus_dec_0mplus_VAJHU.mearray);
3973 
3974  if (isZZWW!=2) mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
3975  else mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=0;
3976  mela.computeProdP(p_prod_0hplus_dec_0hplus_VAJHU.prodme, false);
3977  mela.getIORecord()->getUnweightedMEArray(p_prod_0hplus_dec_0hplus_VAJHU.mearray);
3978 
3979  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; }
3980  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=0; }
3981  mela.computeProdP(p_prod_fa2_dec_fa2_VAJHU.prodme, false);
3982  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_dec_fa2_VAJHU.mearray);
3983 
3984  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1; }
3985  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=0; }
3986  mela.computeProdP(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.prodme, false);
3987  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.mearray);
3988 
3989  if (isZZWW!=2) mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
3990  else mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=0;
3991  mela.computeProdP(p_prod_0minus_dec_0minus_VAJHU.prodme, false);
3992  mela.getIORecord()->getUnweightedMEArray(p_prod_0minus_dec_0minus_VAJHU.mearray);
3993 
3994  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; }
3995  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=0; }
3996  mela.computeProdP(p_prod_fa3_dec_fa3_VAJHU.prodme, false);
3997  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_dec_fa3_VAJHU.mearray);
3998 
3999  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1; }
4000  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=0; }
4001  mela.computeProdP(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.prodme, false);
4002  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.mearray);
4003 
4004  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=-1; }
4005  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=0; }
4006  mela.computeProdP(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.prodme, false);
4007  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.mearray);
4008 
4009  {
4010  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4011  mela.computeProdP(p_prod_0mplusL2_dec_0mplusL2_VAJHU.prodme, false);
4012  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplusL2_dec_0mplusL2_VAJHU.mearray);
4013 
4014  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4015  mela.computeProdP(p_prod_fL2_dec_fL2_VAJHU.prodme, false);
4016  mela.getIORecord()->getUnweightedMEArray(p_prod_fL2_dec_fL2_VAJHU.mearray);
4017  }
4018  if (computeJHUZA){
4019  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4020  mela.computeProdP(p_prod_0minusZA_dec_0minusZA_VAJHU.prodme, false);
4021  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusZA_dec_0minusZA_VAJHU.mearray);
4022 
4023  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4024  mela.computeProdP(p_prod_0minusAA_dec_0minusAA_VAJHU.prodme, false);
4025  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusAA_dec_0minusAA_VAJHU.mearray);
4026 
4027  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4028  mela.computeProdP(p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme, false);
4029  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3ZA_dec_fa3ZA_VAJHU.mearray);
4030 
4031  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4032  mela.computeProdP(p_prod_fa3AA_dec_fa3AA_VAJHU.prodme, false);
4033  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3AA_dec_fa3AA_VAJHU.mearray);
4034  }
4035  else{
4036  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4037  mela.computeProdP(p_prod_0minusZA_dec_0minusZA_VAJHU.prodme, false);
4038  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusZA_dec_0minusZA_VAJHU.mearray);
4039 
4040  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4041  mela.computeProdP(p_prod_0minusAA_dec_0minusAA_VAJHU.prodme, false);
4042  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusAA_dec_0minusAA_VAJHU.mearray);
4043 
4044  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4045  mela.computeProdP(p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme, false);
4046  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3ZA_dec_fa3ZA_VAJHU.mearray);
4047 
4048  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4049  mela.computeProdP(p_prod_fa3AA_dec_fa3AA_VAJHU.prodme, false);
4050  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3AA_dec_fa3AA_VAJHU.mearray);
4051  }
4052  }
4053  else if (prod==TVar::Had_WH_S || prod==TVar::Lep_WH_S){
4054  if (prod==TVar::Had_WH_S){
4056  cout << "JHUGen production chosen: " << TVar::ProductionName(TVar::Had_WH) << endl;
4057  }
4058  else{
4060  cout << "JHUGen production chosen: " << TVar::ProductionName(TVar::Lep_WH) << endl;
4061  }
4062 
4063  if (isZZWW!=1) mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4064  mela.computeProdP(p_prod_0mplus_dec_0mplus_VAJHU.prodme, false);
4065  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplus_dec_0mplus_VAJHU.mearray);
4066 
4067  if (isZZWW!=1) mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
4068  mela.computeProdP(p_prod_0hplus_dec_0hplus_VAJHU.prodme, false);
4069  mela.getIORecord()->getUnweightedMEArray(p_prod_0hplus_dec_0hplus_VAJHU.mearray);
4070 
4071  if (isZZWW!=1){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; }
4072  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=0; }
4073  mela.computeProdP(p_prod_fa2_dec_fa2_VAJHU.prodme, false);
4074  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_dec_fa2_VAJHU.mearray);
4075 
4076  if (isZZWW!=1){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1; }
4077  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=0; }
4078  mela.computeProdP(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.prodme, false);
4079  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.mearray);
4080 
4081  if (isZZWW!=1) mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
4082  mela.computeProdP(p_prod_0minus_dec_0minus_VAJHU.prodme, false);
4083  mela.getIORecord()->getUnweightedMEArray(p_prod_0minus_dec_0minus_VAJHU.mearray);
4084 
4085  if (isZZWW!=1){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; }
4086  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=0; }
4087  mela.computeProdP(p_prod_fa3_dec_fa3_VAJHU.prodme, false);
4088  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_dec_fa3_VAJHU.mearray);
4089 
4090  if (isZZWW!=1){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1; }
4091  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=0; }
4092  mela.computeProdP(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.prodme, false);
4093  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.mearray);
4094 
4095  if (isZZWW!=1){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=-1; }
4096  else{ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=0; }
4097  mela.computeProdP(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.prodme, false);
4098  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.mearray);
4099 
4100  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4101  mela.computeProdP(p_prod_0minusZA_dec_0minusZA_VAJHU.prodme, false);
4102  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusZA_dec_0minusZA_VAJHU.mearray);
4103 
4104  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4105  mela.computeProdP(p_prod_0minusAA_dec_0minusAA_VAJHU.prodme, false);
4106  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusAA_dec_0minusAA_VAJHU.mearray);
4107 
4108  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4109  mela.computeProdP(p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme, false);
4110  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3ZA_dec_fa3ZA_VAJHU.mearray);
4111 
4112  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4113  mela.computeProdP(p_prod_fa3AA_dec_fa3AA_VAJHU.prodme, false);
4114  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3AA_dec_fa3AA_VAJHU.mearray);
4115 
4116  {
4117  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000;
4118  mela.computeProdP(p_prod_0mplusL2_dec_0mplusL2_VAJHU.prodme, false);
4119  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplusL2_dec_0mplusL2_VAJHU.mearray);
4120 
4121  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000;
4122  mela.computeProdP(p_prod_fL2_dec_fL2_VAJHU.prodme, false);
4123  mela.getIORecord()->getUnweightedMEArray(p_prod_fL2_dec_fL2_VAJHU.mearray);
4124  }
4125  }
4126  }
4127 
4128  double mh=mPOLE;
4129  double gah=wPOLE;
4130  double propagator = 1./(pow(pow(mzz, 2)-pow(mPOLE, 2), 2)+pow(mPOLE*wPOLE, 2));
4131  if (vbfvhchannel>=1){ // JHUGen VH pseudo-propagator
4132  mela.getIORecord()->getHiggsMassWidth(mh, gah, 0);
4133  propagator /= 1./(pow(pow(mzz, 2)-pow(mh, 2), 2) + pow(mh*gah, 2));
4134  }
4135  p_prod_0mplus_dec_0mplus_VAJHU.prodme *= propagator; p_prod_0mplus_dec_0mplus_VAJHU.multiplyarray(propagator);
4136  p_prod_0minus_dec_0minus_VAJHU.prodme *= propagator; p_prod_0minus_dec_0minus_VAJHU.multiplyarray(propagator);
4137  p_prod_0hplus_dec_0hplus_VAJHU.prodme *= propagator; p_prod_0hplus_dec_0hplus_VAJHU.multiplyarray(propagator);
4138  p_prod_0mplusL2_dec_0mplusL2_VAJHU.prodme *= propagator; p_prod_0mplusL2_dec_0mplusL2_VAJHU.multiplyarray(propagator);
4139  p_prod_0minusZA_dec_0minusZA_VAJHU.prodme *= propagator; p_prod_0minusZA_dec_0minusZA_VAJHU.multiplyarray(propagator);
4140  p_prod_0minusAA_dec_0minusAA_VAJHU.prodme *= propagator; p_prod_0minusAA_dec_0minusAA_VAJHU.multiplyarray(propagator);
4141  p_prod_fa2_dec_fa2_VAJHU.prodme *= propagator; p_prod_fa2_dec_fa2_VAJHU.multiplyarray(propagator);
4142  p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.prodme *= propagator; p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.multiplyarray(propagator);
4143  p_prod_fa3_dec_fa3_VAJHU.prodme *= propagator; p_prod_fa3_dec_fa3_VAJHU.multiplyarray(propagator);
4144  p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.prodme *= propagator; p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.multiplyarray(propagator);
4145  p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.prodme *= propagator; p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.multiplyarray(propagator);
4146  p_prod_fL2_dec_fL2_VAJHU.prodme *= propagator; p_prod_fL2_dec_fL2_VAJHU.multiplyarray(propagator);
4147  p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme *= propagator; p_prod_fa3ZA_dec_fa3ZA_VAJHU.multiplyarray(propagator);
4148  p_prod_fa3AA_dec_fa3AA_VAJHU.prodme *= propagator; p_prod_fa3AA_dec_fa3AA_VAJHU.multiplyarray(propagator);
4149 
4150  p_prod_0mplus_dec_0mplus_VAJHU.proddecme = p_prod_0mplus_dec_0mplus_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_0mplus_dec_0mplus_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4151  if (isZZWW==ZZWWdec_onevertexflag){ // MCFM setting below turns off ZZ anomalous couplings if WH with WW couplings tested, so we should do the same here.
4152  p_prod_0hplus_dec_0hplus_VAJHU.proddecme = p_prod_0hplus_dec_0hplus_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_0hplus_dec_0hplus_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4153  p_prod_fa2_dec_fa2_VAJHU.proddecme = p_prod_fa2_dec_fa2_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_fa2_dec_fa2_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4154  p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.proddecme = p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4155  p_prod_0minus_dec_0minus_VAJHU.proddecme = p_prod_0minus_dec_0minus_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_0minus_dec_0minus_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4156  p_prod_fa3_dec_fa3_VAJHU.proddecme = p_prod_fa3_dec_fa3_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_fa3_dec_fa3_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4157  p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.proddecme = p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4158  p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.proddecme = p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.prodme*p_prod_0mplus_dec_0mplus_VAJHU.decme; p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.multiplyarray(p_prod_0mplus_dec_0mplus_VAJHU.decme);
4159  }
4160  else{
4161  p_prod_0hplus_dec_0hplus_VAJHU.proddecme = p_prod_0hplus_dec_0hplus_VAJHU.prodme*p_prod_0hplus_dec_0hplus_VAJHU.decme; p_prod_0hplus_dec_0hplus_VAJHU.multiplyarray(p_prod_0hplus_dec_0hplus_VAJHU.decme);
4162  p_prod_fa2_dec_fa2_VAJHU.proddecme = p_prod_fa2_dec_fa2_VAJHU.prodme*p_prod_fa2_dec_fa2_VAJHU.decme; p_prod_fa2_dec_fa2_VAJHU.multiplyarray(p_prod_fa2_dec_fa2_VAJHU.decme);
4163  p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.proddecme = p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.prodme*p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.decme; p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.multiplyarray(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.decme);
4164  p_prod_0minus_dec_0minus_VAJHU.proddecme = p_prod_0minus_dec_0minus_VAJHU.prodme*p_prod_0minus_dec_0minus_VAJHU.decme; p_prod_0minus_dec_0minus_VAJHU.multiplyarray(p_prod_0minus_dec_0minus_VAJHU.decme);
4165  p_prod_fa3_dec_fa3_VAJHU.proddecme = p_prod_fa3_dec_fa3_VAJHU.prodme*p_prod_fa3_dec_fa3_VAJHU.decme; p_prod_fa3_dec_fa3_VAJHU.multiplyarray(p_prod_fa3_dec_fa3_VAJHU.decme);
4166  p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.proddecme = p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.prodme*p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.decme; p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.multiplyarray(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.decme);
4167  p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.proddecme = p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.prodme*p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.decme; p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.multiplyarray(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.decme);
4168  }
4169  // These MEs only test WW anomalous couplings, so everything is fine here.
4170  p_prod_0mplusL2_dec_0mplusL2_VAJHU.proddecme = p_prod_0mplusL2_dec_0mplusL2_VAJHU.prodme*p_prod_0mplusL2_dec_0mplusL2_VAJHU.decme; p_prod_0mplusL2_dec_0mplusL2_VAJHU.multiplyarray(p_prod_0mplusL2_dec_0mplusL2_VAJHU.decme);
4171  p_prod_fL2_dec_fL2_VAJHU.proddecme = p_prod_fL2_dec_fL2_VAJHU.prodme*p_prod_fL2_dec_fL2_VAJHU.decme; p_prod_fL2_dec_fL2_VAJHU.multiplyarray(p_prod_fL2_dec_fL2_VAJHU.decme);
4172  // These MEs are a test of WWZZ ZZ anomalous coupling, so test here separately
4173  p_prod_0minusZA_dec_0minusZA_VAJHU.proddecme = p_prod_0minusZA_dec_0minusZA_VAJHU.prodme*p_prod_0minusZA_dec_0minusZA_VAJHU.decme; p_prod_0minusZA_dec_0minusZA_VAJHU.multiplyarray(p_prod_0minusZA_dec_0minusZA_VAJHU.decme);
4174  p_prod_0minusAA_dec_0minusAA_VAJHU.proddecme = p_prod_0minusAA_dec_0minusAA_VAJHU.prodme*p_prod_0minusAA_dec_0minusAA_VAJHU.decme; p_prod_0minusAA_dec_0minusAA_VAJHU.multiplyarray(p_prod_0minusAA_dec_0minusAA_VAJHU.decme);
4175  p_prod_fa3ZA_dec_fa3ZA_VAJHU.proddecme = p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme*p_prod_fa3ZA_dec_fa3ZA_VAJHU.decme; p_prod_fa3ZA_dec_fa3ZA_VAJHU.multiplyarray(p_prod_fa3ZA_dec_fa3ZA_VAJHU.decme);
4176  p_prod_fa3AA_dec_fa3AA_VAJHU.proddecme = p_prod_fa3AA_dec_fa3AA_VAJHU.prodme*p_prod_fa3AA_dec_fa3AA_VAJHU.decme; p_prod_fa3AA_dec_fa3AA_VAJHU.multiplyarray(p_prod_fa3AA_dec_fa3AA_VAJHU.decme);
4177 
4178  /***** MCFM *****/
4179  // Reset these in case the function needs to be repeated
4180  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4181  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4182 
4183  if (isZZWW==ZZWWdec_onevertexflag) spinzerohiggs_anomcoupl_.AnomalCouplDK=0; // Test WW couplings in ZZ decay or ZZ couplings in WW decay
4184  else spinzerohiggs_anomcoupl_.AnomalCouplDK=1; // Test prod*decay couplings
4185 
4186  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, prod);
4187  cout << "MCFM production chosen: " << TVar::ProductionName(prod) << endl;
4188  cout << "spinzerohiggs_anomcoupl_.AnomalCouplDK=" << spinzerohiggs_anomcoupl_.AnomalCouplDK << endl;
4189 
4190  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4191  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
4192  mela.computeProdDecP(p_prod_0mplus_dec_0mplus_VAMCFM.proddecme, false);
4193  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplus_dec_0mplus_VAMCFM.mearray);
4194 
4195  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4196  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_2][0]=1; mela.differentiate_HWW_HZZ=true; }
4197  mela.computeProdDecP(p_prod_0hplus_dec_0hplus_VAMCFM.proddecme, false);
4198  mela.getIORecord()->getUnweightedMEArray(p_prod_0hplus_dec_0hplus_VAMCFM.mearray);
4199 
4200  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4201  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_2][0]=1; mela.differentiate_HWW_HZZ=true; }
4202  mela.computeProdDecP(p_prod_fa2_dec_fa2_VAMCFM.proddecme, false);
4203  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_dec_fa2_VAMCFM.mearray);
4204 
4205  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4206  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_2][1]=1; mela.differentiate_HWW_HZZ=true; }
4207  mela.computeProdDecP(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAMCFM.proddecme, false);
4208  mela.getIORecord()->getUnweightedMEArray(p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAMCFM.mearray);
4209 
4210  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4211  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
4212  mela.computeProdDecP(p_prod_0minus_dec_0minus_VAMCFM.proddecme, false);
4213  mela.getIORecord()->getUnweightedMEArray(p_prod_0minus_dec_0minus_VAMCFM.mearray);
4214 
4215  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4216  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
4217  mela.computeProdDecP(p_prod_fa3_dec_fa3_VAMCFM.proddecme, false);
4218  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_dec_fa3_VAMCFM.mearray);
4219 
4220  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4221  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][1]=1; mela.differentiate_HWW_HZZ=true; }
4222  mela.computeProdDecP(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAMCFM.proddecme, false);
4223  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAMCFM.mearray);
4224 
4225  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=-1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
4226  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][1]=-1; mela.differentiate_HWW_HZZ=true; }
4227  mela.computeProdDecP(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAMCFM.proddecme, false);
4228  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAMCFM.mearray);
4229 
4230  // Test L2 asymmetric coupling in WW as well
4231  bool computeL2WWproddec=(isZZWW==2 || decZZWW==2);
4232  if (computeL2WWproddec){
4233  mela.differentiate_HWW_HZZ=true;
4234  if (isZZWW==2 && decZZWW!=2){
4235  if (vbfvhchannel==0){ // If WW fusion and ZZ decay, turn off ZZ couplings, and AC in DK
4236  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0;
4237  spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
4238  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4239  }
4240  else{ // If WH and ZZ decay, again do the same
4241  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0;
4242  spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
4243  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4244  }
4245  }
4246  else if (isZZWW!=2 && decZZWW==2){
4247  if (vbfvhchannel==0){ // If ZZ fusion and WW decay, turn off ZZ couplings, and AC in PR
4248  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4249  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4250  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4251  }
4252  else{ // If ZH and WW decay, keep ZZ coupling on
4253  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4254  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4255  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4256  }
4257  }
4258  else{ // If WW in both production and decay, only turn off ZZ
4259  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0;
4260  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4261  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4262  }
4263  mela.selfDHwwcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000;
4264  /*
4265  cerr << "mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=" << mela.selfDHzzcoupl[0][gHIGGS_VV_1][0] << endl;
4266  cerr << "mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=" << mela.selfDHwwcoupl[0][gHIGGS_VV_1][0] << endl;
4267  cerr << "mela.selfDHwwcoupl[0][gHIGGS_VV_1_PRIME3][0]=" << mela.selfDHwwcoupl[0][gHIGGS_VV_1_PRIME3][0] << endl;
4268  cerr << "mela.differentiate_HWW_HZZ=" << mela.differentiate_HWW_HZZ << endl;
4269  cerr << "spinzerohiggs_anomcoupl_.AnomalCouplPR=" << spinzerohiggs_anomcoupl_.AnomalCouplPR << endl;
4270  cerr << "spinzerohiggs_anomcoupl_.AnomalCouplDK=" << spinzerohiggs_anomcoupl_.AnomalCouplDK << endl;
4271  */
4272  mela.computeProdDecP(p_prod_0mplusL2_dec_0mplusL2_VAMCFM.proddecme, false);
4273  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplusL2_dec_0mplusL2_VAMCFM.mearray);
4274 
4275  mela.differentiate_HWW_HZZ=true;
4276  if (isZZWW==2 && decZZWW!=2){
4277  if (vbfvhchannel==0){ // If WW fusion and ZZ decay, turn off ZZ couplings, and AC in DK
4278  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0;
4279  spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
4280  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4281  }
4282  else{ // If WH and ZZ decay, again do the same
4283  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0;
4284  spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
4285  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4286  }
4287  }
4288  else if (isZZWW!=2 && decZZWW==2){
4289  if (vbfvhchannel==0){ // If ZZ fusion and WW decay, turn off ZZ couplings, and AC in PR
4290  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4291  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4292  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4293  }
4294  else{ // If ZH and WW decay, keep ZZ coupling on
4295  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4296  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4297  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4298  }
4299  }
4300  else{ // If WW in both production and decay, only turn off ZZ
4301  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=0;
4302  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4303  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4304  }
4305  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_1_PRIME3][0]=10000;
4306  mela.computeProdDecP(p_prod_fL2_dec_fL2_VAMCFM.proddecme, false);
4307  mela.getIORecord()->getUnweightedMEArray(p_prod_fL2_dec_fL2_VAMCFM.mearray);
4308 
4309  // Reset
4310  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4311  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4312  }
4313  else{
4314  for (int ii=0; ii<nmsq; ii++){
4315  for (int jj=0; jj<nmsq; jj++){
4316  p_prod_0mplusL2_dec_0mplusL2_VAMCFM.mearray[ii][jj]=p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj]; p_prod_0mplusL2_dec_0mplusL2_VAMCFM.proddecme=p_prod_0mplus_dec_0mplus_VAMCFM.proddecme;
4317  p_prod_fL2_dec_fL2_VAMCFM.mearray[ii][jj]=p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj]; p_prod_fL2_dec_fL2_VAMCFM.proddecme=p_prod_0mplus_dec_0mplus_VAMCFM.proddecme;
4318  }
4319  }
4320  }
4321 
4322  // Test ZA and AA couplings in WWZZ in WBFZZ or ampvbf in WBFWW as well
4323  bool testZAcoupl=true;
4324  if (vbfvhchannel>=1){
4325  if (isZZWW==2 && decZZWW==1){ // WH->ZZ
4326  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4327  spinzerohiggs_anomcoupl_.AnomalCouplPR=0;
4328  }
4329  else if (isZZWW==1 && decZZWW==2){ // ZH->WW
4330  spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
4331  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4332  }
4333  else if (isZZWW==1 && decZZWW==1){ // ZH->ZZ
4334  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4335  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4336  }
4337  else testZAcoupl=false;
4338  }
4339  else{
4340  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
4341  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4342  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4343  }
4344  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
4345  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4346  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4347  }
4348  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
4349  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4350  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4351  }
4352  else testZAcoupl=false;
4353  }
4354 
4355  if (testZAcoupl){
4356  if (vbfvhchannel>=1){
4357  if (isZZWW==2 && decZZWW==1){ // WH->ZZ
4358  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4359  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4360  mela.differentiate_HWW_HZZ=true;
4361  }
4362  else if (isZZWW==1 && decZZWW==2){ // ZH->WW
4363  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4364  mela.differentiate_HWW_HZZ=true;
4365  }
4366  else if (isZZWW==1 && decZZWW==1){ // ZH->ZZ
4367  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4368  mela.differentiate_HWW_HZZ=true;
4369  }
4370  }
4371  else{
4372  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
4373  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4374  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4375  mela.differentiate_HWW_HZZ=true;
4376  }
4377  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
4378  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4379  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4380  mela.differentiate_HWW_HZZ=true;
4381  }
4382  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
4383  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4384  mela.differentiate_HWW_HZZ=true;
4385  }
4386  }
4387  mela.computeProdDecP(p_prod_0minusZA_dec_0minusZA_VAMCFM.proddecme, false);
4388  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusZA_dec_0minusZA_VAMCFM.mearray);
4389 
4390  if (vbfvhchannel>=1){
4391  if (isZZWW==2 && decZZWW==1){ // WH->ZZ
4392  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4393  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4394  mela.differentiate_HWW_HZZ=true;
4395  }
4396  else if (isZZWW==1 && decZZWW==2){ // ZH->WW
4397  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4398  mela.differentiate_HWW_HZZ=true;
4399  }
4400  else if (isZZWW==1 && decZZWW==1){ // ZH->ZZ
4401  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4402  mela.differentiate_HWW_HZZ=true;
4403  }
4404  }
4405  else{
4406  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
4407  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4408  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4409  mela.differentiate_HWW_HZZ=true;
4410  }
4411  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
4412  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4413  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4414  mela.differentiate_HWW_HZZ=true;
4415  }
4416  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
4417  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4418  mela.differentiate_HWW_HZZ=true;
4419  }
4420  }
4421  mela.computeProdDecP(p_prod_0minusAA_dec_0minusAA_VAMCFM.proddecme, false);
4422  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusAA_dec_0minusAA_VAMCFM.mearray);
4423 
4424  if (vbfvhchannel>=1){
4425  if (isZZWW==2 && decZZWW==1){ // WH->ZZ
4426  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4427  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4428  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4429  mela.differentiate_HWW_HZZ=true;
4430  }
4431  else if (isZZWW==1 && decZZWW==2){ // ZH->WW
4432  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4433  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4434  mela.differentiate_HWW_HZZ=true;
4435  }
4436  else if (isZZWW==1 && decZZWW==1){ // ZH->ZZ
4437  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4438  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4439  mela.differentiate_HWW_HZZ=true;
4440  }
4441  }
4442  else{
4443  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
4444  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4445  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4446  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4447  mela.differentiate_HWW_HZZ=true;
4448  }
4449  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
4450  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4451  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4452  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4453  mela.differentiate_HWW_HZZ=true;
4454  }
4455  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
4456  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4457  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
4458  mela.differentiate_HWW_HZZ=true;
4459  }
4460  }
4461  mela.computeProdDecP(p_prod_fa3ZA_dec_fa3ZA_VAMCFM.proddecme, false);
4462  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3ZA_dec_fa3ZA_VAMCFM.mearray);
4463 
4464  if (vbfvhchannel>=1){
4465  if (isZZWW==2 && decZZWW==1){ // WH->ZZ
4466  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4467  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4468  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4469  mela.differentiate_HWW_HZZ=true;
4470  }
4471  else if (isZZWW==1 && decZZWW==2){ // ZH->WW
4472  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4473  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4474  mela.differentiate_HWW_HZZ=true;
4475  }
4476  else if (isZZWW==1 && decZZWW==1){ // ZH->ZZ
4477  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4478  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4479  mela.differentiate_HWW_HZZ=true;
4480  }
4481  }
4482  else{
4483  if (isZZWW==2 && decZZWW==1){ // WW->ZZ
4484  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4485  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4486  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4487  mela.differentiate_HWW_HZZ=true;
4488  }
4489  else if (isZZWW==1 && decZZWW==2){ // ZZ->WW
4490  mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1;
4491  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4492  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4493  mela.differentiate_HWW_HZZ=true;
4494  }
4495  else if (isZZWW==1 && decZZWW==1){ // ZZ->ZZ
4496  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
4497  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
4498  mela.differentiate_HWW_HZZ=true;
4499  }
4500  }
4501  mela.computeProdDecP(p_prod_fa3AA_dec_fa3AA_VAMCFM.proddecme, false);
4502  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3AA_dec_fa3AA_VAMCFM.mearray);
4503  }
4504  else{
4505  for (int ii=0; ii<nmsq; ii++){
4506  for (int jj=0; jj<nmsq; jj++){
4507  p_prod_0minusZA_dec_0minusZA_VAMCFM.mearray[ii][jj]=p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj]; p_prod_0minusZA_dec_0minusZA_VAMCFM.proddecme=p_prod_0mplus_dec_0mplus_VAMCFM.proddecme;
4508  p_prod_0minusAA_dec_0minusAA_VAMCFM.mearray[ii][jj]=p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj]; p_prod_0minusAA_dec_0minusAA_VAMCFM.proddecme=p_prod_0mplus_dec_0mplus_VAMCFM.proddecme;
4509  p_prod_fa3ZA_dec_fa3ZA_VAMCFM.mearray[ii][jj]=p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj]; p_prod_fa3ZA_dec_fa3ZA_VAMCFM.proddecme=p_prod_0mplus_dec_0mplus_VAMCFM.proddecme;
4510  p_prod_fa3AA_dec_fa3AA_VAMCFM.mearray[ii][jj]=p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj]; p_prod_fa3AA_dec_fa3AA_VAMCFM.proddecme=p_prod_0mplus_dec_0mplus_VAMCFM.proddecme;
4511  }
4512  }
4513  }
4514 
4515  if (decZZWW==1) mela.setProcess(TVar::bkgZZ, TVar::MCFM, prod);
4516  else mela.setProcess(TVar::bkgWW, TVar::MCFM, prod);
4517  mela.computeProdDecP(p_bkg_VAMCFM.proddecme, false);
4518  mela.getIORecord()->getUnweightedMEArray(p_bkg_VAMCFM.mearray);
4519  if (motherflavor==0 && vbfvhchannel<2){
4520  for (int r=-5; r<=5; r++){
4521  for (int s=-5; s<=5; s++){
4522  MELACandidate* cand = mela.getCurrentCandidate();
4523  int idj[2] ={
4524  cand->getAssociatedJet(0)->id,
4525  cand->getAssociatedJet(1)->id
4526  };
4527 
4528  cand->getAssociatedJet(0)->id=r;
4529  cand->getAssociatedJet(1)->id=s;
4530  mcfmme p_bkg_VAMCFM_rsindiv;
4531  mela.computeProdDecP(p_bkg_VAMCFM_rsindiv.proddecme, false);
4532  mela.getIORecord()->getUnweightedMEArray(p_bkg_VAMCFM_rsindiv.mearray);
4533  p_bkg_VAMCFM_rssum.add(p_bkg_VAMCFM_rsindiv);
4534  cand->getAssociatedJet(0)->id=idj[0];
4535  cand->getAssociatedJet(1)->id=idj[1];
4536  }
4537  }
4538  }
4539 
4540  // Reset these in case the function needs to be repeated
4541  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
4542  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
4543 
4544  cout << "Production variables:\n";
4545  cout << "\tmJJ = " << mjj << endl;
4546  cout << "\tPhi = " << Phi << endl;
4547  cout << "\tJHUGen (mass, width): (" << mh << ", " << gah << ")" << endl;
4548  cout << "\tJHUGen propagator: " << propagator << endl;
4549  cout << "Bkg" << endl;
4550  cout << "\tMCFM ME: " << p_bkg_VAMCFM.proddecme << endl;
4551  cout << "0mplus" << endl;
4552  cout << "\tJHUGen decay-alone: " << p_prod_0mplus_dec_0mplus_VAJHU.decme << endl;
4553  cout << "\tJHUGen prod.-alone: " << p_prod_0mplus_dec_0mplus_VAJHU.prodme << endl;
4554  cout << "\tJHUGen ME: " << p_prod_0mplus_dec_0mplus_VAJHU.proddecme << endl;
4555  cout << "\tMCFM ME: " << p_prod_0mplus_dec_0mplus_VAMCFM.proddecme << endl;
4556  cout << "0hplus" << endl;
4557  cout << "\tJHUGen decay-alone: " << p_prod_0hplus_dec_0hplus_VAJHU.decme << endl;
4558  cout << "\tJHUGen prod.-alone: " << p_prod_0hplus_dec_0hplus_VAJHU.prodme << endl;
4559  cout << "\tJHUGen ME: " << p_prod_0hplus_dec_0hplus_VAJHU.proddecme << endl;
4560  cout << "\tMCFM ME: " << p_prod_0hplus_dec_0hplus_VAMCFM.proddecme << endl;
4561  cout << "fa2" << endl;
4562  cout << "\tJHUGen decay-alone: " << p_prod_fa2_dec_fa2_VAJHU.decme << endl;
4563  cout << "\tJHUGen prod.-alone: " << p_prod_fa2_dec_fa2_VAJHU.prodme << endl;
4564  cout << "\tJHUGen ME: " << p_prod_fa2_dec_fa2_VAJHU.proddecme << endl;
4565  cout << "\tMCFM ME: " << p_prod_fa2_dec_fa2_VAMCFM.proddecme << endl;
4566  cout << "fa2, phia2=90" << endl;
4567  cout << "\tJHUGen decay-alone: " << p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.decme << endl;
4568  cout << "\tJHUGen prod.-alone: " << p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.prodme << endl;
4569  cout << "\tJHUGen ME: " << p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.proddecme << endl;
4570  cout << "\tMCFM ME: " << p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAMCFM.proddecme << endl;
4571  cout << "0minus" << endl;
4572  cout << "\tJHUGen decay-alone: " << p_prod_0minus_dec_0minus_VAJHU.decme << endl;
4573  cout << "\tJHUGen prod.-alone: " << p_prod_0minus_dec_0minus_VAJHU.prodme << endl;
4574  cout << "\tJHUGen ME: " << p_prod_0minus_dec_0minus_VAJHU.proddecme << endl;
4575  cout << "\tMCFM ME: " << p_prod_0minus_dec_0minus_VAMCFM.proddecme << endl;
4576  cout << "fa3" << endl;
4577  cout << "\tJHUGen decay-alone: " << p_prod_fa3_dec_fa3_VAJHU.decme << endl;
4578  cout << "\tJHUGen prod.-alone: " << p_prod_fa3_dec_fa3_VAJHU.prodme << endl;
4579  cout << "\tJHUGen ME: " << p_prod_fa3_dec_fa3_VAJHU.proddecme << endl;
4580  cout << "\tMCFM ME: " << p_prod_fa3_dec_fa3_VAMCFM.proddecme << endl;
4581  cout << "fa3, phia3=90" << endl;
4582  cout << "\tJHUGen decay-alone: " << p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.decme << endl;
4583  cout << "\tJHUGen prod.-alone: " << p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.prodme << endl;
4584  cout << "\tJHUGen ME: " << p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.proddecme << endl;
4585  cout << "\tMCFM ME: " << p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAMCFM.proddecme << endl;
4586  cout << "fa3, phia3=270" << endl;
4587  cout << "\tJHUGen decay-alone: " << p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.decme << endl;
4588  cout << "\tJHUGen prod.-alone: " << p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.prodme << endl;
4589  cout << "\tJHUGen ME: " << p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.proddecme << endl;
4590  cout << "\tMCFM ME: " << p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAMCFM.proddecme << endl;
4591  cout << "0mplusL2" << endl;
4592  cout << "\tJHUGen decay-alone: " << p_prod_0mplusL2_dec_0mplusL2_VAJHU.decme << endl;
4593  cout << "\tJHUGen prod.-alone: " << p_prod_0mplusL2_dec_0mplusL2_VAJHU.prodme << endl;
4594  cout << "\tJHUGen ME: " << p_prod_0mplusL2_dec_0mplusL2_VAJHU.proddecme << endl;
4595  cout << "\tMCFM ME: " << p_prod_0mplusL2_dec_0mplusL2_VAMCFM.proddecme << endl;
4596  cout << "fL2" << endl;
4597  cout << "\tJHUGen decay-alone: " << p_prod_fL2_dec_fL2_VAJHU.decme << endl;
4598  cout << "\tJHUGen prod.-alone: " << p_prod_fL2_dec_fL2_VAJHU.prodme << endl;
4599  cout << "\tJHUGen ME: " << p_prod_fL2_dec_fL2_VAJHU.proddecme << endl;
4600  cout << "\tMCFM ME: " << p_prod_fL2_dec_fL2_VAMCFM.proddecme << endl;
4601  cout << "0minusZA" << endl;
4602  cout << "\tJHUGen decay-alone: " << p_prod_0minusZA_dec_0minusZA_VAJHU.decme << endl;
4603  cout << "\tJHUGen prod.-alone: " << p_prod_0minusZA_dec_0minusZA_VAJHU.prodme << endl;
4604  cout << "\tJHUGen ME: " << p_prod_0minusZA_dec_0minusZA_VAJHU.proddecme << endl;
4605  cout << "\tMCFM ME: " << p_prod_0minusZA_dec_0minusZA_VAMCFM.proddecme << endl;
4606  cout << "fa3ZA" << endl;
4607  cout << "\tJHUGen decay-alone: " << p_prod_fa3ZA_dec_fa3ZA_VAJHU.decme << endl;
4608  cout << "\tJHUGen prod.-alone: " << p_prod_fa3ZA_dec_fa3ZA_VAJHU.prodme << endl;
4609  cout << "\tJHUGen ME: " << p_prod_fa3ZA_dec_fa3ZA_VAJHU.proddecme << endl;
4610  cout << "\tMCFM ME: " << p_prod_fa3ZA_dec_fa3ZA_VAMCFM.proddecme << endl;
4611  cout << "0minusAA" << endl;
4612  cout << "\tJHUGen decay-alone: " << p_prod_0minusAA_dec_0minusAA_VAJHU.decme << endl;
4613  cout << "\tJHUGen prod.-alone: " << p_prod_0minusAA_dec_0minusAA_VAJHU.prodme << endl;
4614  cout << "\tJHUGen ME: " << p_prod_0minusAA_dec_0minusAA_VAJHU.proddecme << endl;
4615  cout << "\tMCFM ME: " << p_prod_0minusAA_dec_0minusAA_VAMCFM.proddecme << endl;
4616  cout << "fa3AA" << endl;
4617  cout << "\tJHUGen decay-alone: " << p_prod_fa3AA_dec_fa3AA_VAJHU.decme << endl;
4618  cout << "\tJHUGen prod.-alone: " << p_prod_fa3AA_dec_fa3AA_VAJHU.prodme << endl;
4619  cout << "\tJHUGen ME: " << p_prod_fa3AA_dec_fa3AA_VAJHU.proddecme << endl;
4620  cout << "\tMCFM ME: " << p_prod_fa3AA_dec_fa3AA_VAMCFM.proddecme << endl;
4621 
4622  cout << "Arrays:" << endl;
4623  cout << "0mplus" << endl;
4624  cout << "\tJHUGen" << endl;
4625  p_prod_0mplus_dec_0mplus_VAJHU.printarray();
4626  cout << "\tMCFM" << endl;
4627  p_prod_0mplus_dec_0mplus_VAMCFM.printarray();
4628  cout << "\tJHUGen/MCFM Ratio" << endl;
4629  for (int ii=0; ii<nmsq; ii++){
4630  for (int jj=0; jj<nmsq; jj++){
4631  cout << '\t';
4632  if (p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_0mplus_dec_0mplus_VAJHU.mearray[ii][jj]/p_prod_0mplus_dec_0mplus_VAMCFM.mearray[ii][jj];
4633  else cout << 0;
4634  }
4635  cout << endl;
4636  }
4637  cout << "0hplus" << endl;
4638  cout << "\tJHUGen" << endl;
4639  p_prod_0hplus_dec_0hplus_VAJHU.printarray();
4640  cout << "\tMCFM" << endl;
4641  p_prod_0hplus_dec_0hplus_VAMCFM.printarray();
4642  cout << "\tJHUGen/MCFM Ratio" << endl;
4643  for (int ii=0; ii<nmsq; ii++){
4644  for (int jj=0; jj<nmsq; jj++){
4645  cout << '\t';
4646  if (p_prod_0hplus_dec_0hplus_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_0hplus_dec_0hplus_VAJHU.mearray[ii][jj]/p_prod_0hplus_dec_0hplus_VAMCFM.mearray[ii][jj];
4647  else cout << 0;
4648  }
4649  cout << endl;
4650  }
4651  cout << "fa2" << endl;
4652  cout << "\tJHUGen" << endl;
4653  p_prod_fa2_dec_fa2_VAJHU.printarray();
4654  cout << "\tMCFM" << endl;
4655  p_prod_fa2_dec_fa2_VAMCFM.printarray();
4656  cout << "\tJHUGen/MCFM Ratio" << endl;
4657  for (int ii=0; ii<nmsq; ii++){
4658  for (int jj=0; jj<nmsq; jj++){
4659  cout << '\t';
4660  if (p_prod_fa2_dec_fa2_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fa2_dec_fa2_VAJHU.mearray[ii][jj]/p_prod_fa2_dec_fa2_VAMCFM.mearray[ii][jj];
4661  else cout << 0;
4662  }
4663  cout << endl;
4664  }
4665  cout << "fa2, phia2=90" << endl;
4666  cout << "\tJHUGen" << endl;
4667  p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.printarray();
4668  cout << "\tMCFM" << endl;
4669  p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAMCFM.printarray();
4670  cout << "\tJHUGen/MCFM Ratio" << endl;
4671  for (int ii=0; ii<nmsq; ii++){
4672  for (int jj=0; jj<nmsq; jj++){
4673  cout << '\t';
4674  if (p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAJHU.mearray[ii][jj]/p_prod_fa2_phia2_90_dec_fa2_phia2_90_VAMCFM.mearray[ii][jj];
4675  else cout << 0;
4676  }
4677  cout << endl;
4678  }
4679  cout << "0minus" << endl;
4680  cout << "\tJHUGen" << endl;
4681  p_prod_0minus_dec_0minus_VAJHU.printarray();
4682  cout << "\tMCFM" << endl;
4683  p_prod_0minus_dec_0minus_VAMCFM.printarray();
4684  cout << "\tJHUGen/MCFM Ratio" << endl;
4685  for (int ii=0; ii<nmsq; ii++){
4686  for (int jj=0; jj<nmsq; jj++){
4687  cout << '\t';
4688  if (p_prod_0minus_dec_0minus_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_0minus_dec_0minus_VAJHU.mearray[ii][jj]/p_prod_0minus_dec_0minus_VAMCFM.mearray[ii][jj];
4689  else cout << 0;
4690  }
4691  cout << endl;
4692  }
4693  cout << "fa3" << endl;
4694  cout << "\tJHUGen" << endl;
4695  p_prod_fa3_dec_fa3_VAJHU.printarray();
4696  cout << "\tMCFM" << endl;
4697  p_prod_fa3_dec_fa3_VAMCFM.printarray();
4698  cout << "\tJHUGen/MCFM Ratio" << endl;
4699  for (int ii=0; ii<nmsq; ii++){
4700  for (int jj=0; jj<nmsq; jj++){
4701  cout << '\t';
4702  if (p_prod_fa3_dec_fa3_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fa3_dec_fa3_VAJHU.mearray[ii][jj]/p_prod_fa3_dec_fa3_VAMCFM.mearray[ii][jj];
4703  else cout << 0;
4704  }
4705  cout << endl;
4706  }
4707  cout << "fa3, phia3=90" << endl;
4708  cout << "\tJHUGen" << endl;
4709  p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.printarray();
4710  cout << "\tMCFM" << endl;
4711  p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAMCFM.printarray();
4712  cout << "\tJHUGen/MCFM Ratio" << endl;
4713  for (int ii=0; ii<nmsq; ii++){
4714  for (int jj=0; jj<nmsq; jj++){
4715  cout << '\t';
4716  if (p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAJHU.mearray[ii][jj]/p_prod_fa3_phia3_90_dec_fa3_phia3_90_VAMCFM.mearray[ii][jj];
4717  else cout << 0;
4718  }
4719  cout << endl;
4720  }
4721  cout << "fa3, phia3=270" << endl;
4722  cout << "\tJHUGen" << endl;
4723  p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.printarray();
4724  cout << "\tMCFM" << endl;
4725  p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAMCFM.printarray();
4726  cout << "\tJHUGen/MCFM Ratio" << endl;
4727  for (int ii=0; ii<nmsq; ii++){
4728  for (int jj=0; jj<nmsq; jj++){
4729  cout << '\t';
4730  if (p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAJHU.mearray[ii][jj]/p_prod_fa3_phia3_270_dec_fa3_phia3_270_VAMCFM.mearray[ii][jj];
4731  else cout << 0;
4732  }
4733  cout << endl;
4734  }
4735  cout << "0mplusL2" << endl;
4736  cout << "\tJHUGen" << endl;
4737  p_prod_0mplusL2_dec_0mplusL2_VAJHU.printarray();
4738  cout << "\tMCFM" << endl;
4739  p_prod_0mplusL2_dec_0mplusL2_VAMCFM.printarray();
4740  cout << "\tJHUGen/MCFM Ratio" << endl;
4741  for (int ii=0; ii<nmsq; ii++){
4742  for (int jj=0; jj<nmsq; jj++){
4743  cout << '\t';
4744  if (p_prod_0mplusL2_dec_0mplusL2_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_0mplusL2_dec_0mplusL2_VAJHU.mearray[ii][jj]/p_prod_0mplusL2_dec_0mplusL2_VAMCFM.mearray[ii][jj];
4745  else cout << 0;
4746  }
4747  cout << endl;
4748  }
4749  cout << "fL2" << endl;
4750  cout << "\tJHUGen" << endl;
4751  p_prod_fL2_dec_fL2_VAJHU.printarray();
4752  cout << "\tMCFM" << endl;
4753  p_prod_fL2_dec_fL2_VAMCFM.printarray();
4754  cout << "\tJHUGen/MCFM Ratio" << endl;
4755  for (int ii=0; ii<nmsq; ii++){
4756  for (int jj=0; jj<nmsq; jj++){
4757  cout << '\t';
4758  if (p_prod_fL2_dec_fL2_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fL2_dec_fL2_VAJHU.mearray[ii][jj]/p_prod_fL2_dec_fL2_VAMCFM.mearray[ii][jj];
4759  else cout << 0;
4760  }
4761  cout << endl;
4762  }
4763  cout << "0minusZA" << endl;
4764  cout << "\tJHUGen" << endl;
4765  p_prod_0minusZA_dec_0minusZA_VAJHU.printarray();
4766  cout << "\tMCFM" << endl;
4767  p_prod_0minusZA_dec_0minusZA_VAMCFM.printarray();
4768  cout << "\tJHUGen/MCFM Ratio" << endl;
4769  for (int ii=0; ii<nmsq; ii++){
4770  for (int jj=0; jj<nmsq; jj++){
4771  cout << '\t';
4772  if (p_prod_0minusZA_dec_0minusZA_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_0minusZA_dec_0minusZA_VAJHU.mearray[ii][jj]/p_prod_0minusZA_dec_0minusZA_VAMCFM.mearray[ii][jj];
4773  else cout << 0;
4774  }
4775  cout << endl;
4776  }
4777  cout << "fa3ZA" << endl;
4778  cout << "\tJHUGen" << endl;
4779  p_prod_fa3ZA_dec_fa3ZA_VAJHU.printarray();
4780  cout << "\tMCFM" << endl;
4781  p_prod_fa3ZA_dec_fa3ZA_VAMCFM.printarray();
4782  cout << "\tJHUGen/MCFM Ratio" << endl;
4783  for (int ii=0; ii<nmsq; ii++){
4784  for (int jj=0; jj<nmsq; jj++){
4785  cout << '\t';
4786  if (p_prod_fa3ZA_dec_fa3ZA_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fa3ZA_dec_fa3ZA_VAJHU.mearray[ii][jj]/p_prod_fa3ZA_dec_fa3ZA_VAMCFM.mearray[ii][jj];
4787  else cout << 0;
4788  }
4789  cout << endl;
4790  }
4791  cout << "0minusAA" << endl;
4792  cout << "\tJHUGen" << endl;
4793  p_prod_0minusAA_dec_0minusAA_VAJHU.printarray();
4794  cout << "\tMCFM" << endl;
4795  p_prod_0minusAA_dec_0minusAA_VAMCFM.printarray();
4796  cout << "\tJHUGen/MCFM Ratio" << endl;
4797  for (int ii=0; ii<nmsq; ii++){
4798  for (int jj=0; jj<nmsq; jj++){
4799  cout << '\t';
4800  if (p_prod_0minusAA_dec_0minusAA_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_0minusAA_dec_0minusAA_VAJHU.mearray[ii][jj]/p_prod_0minusAA_dec_0minusAA_VAMCFM.mearray[ii][jj];
4801  else cout << 0;
4802  }
4803  cout << endl;
4804  }
4805  cout << "fa3AA" << endl;
4806  cout << "\tJHUGen" << endl;
4807  p_prod_fa3AA_dec_fa3AA_VAJHU.printarray();
4808  cout << "\tMCFM" << endl;
4809  p_prod_fa3AA_dec_fa3AA_VAMCFM.printarray();
4810  cout << "\tJHUGen/MCFM Ratio" << endl;
4811  for (int ii=0; ii<nmsq; ii++){
4812  for (int jj=0; jj<nmsq; jj++){
4813  cout << '\t';
4814  if (p_prod_fa3AA_dec_fa3AA_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_fa3AA_dec_fa3AA_VAJHU.mearray[ii][jj]/p_prod_fa3AA_dec_fa3AA_VAMCFM.mearray[ii][jj];
4815  else cout << 0;
4816  }
4817  cout << endl;
4818  }
4819  cout << "Bkg" << endl;
4820  cout << "\tMCFM" << endl;
4821  p_bkg_VAMCFM.printarray();
4822  cout << "\tMCFM 0mplus/Bkg Ratio" << endl;
4823  for (int ii=0; ii<nmsq; ii++){
4824  for (int jj=0; jj<nmsq; jj++){
4825  cout << '\t';
4826  if (p_bkg_VAMCFM.mearray[ii][jj]!=0.) cout << p_prod_0mplus_dec_0mplus_VAJHU.mearray[ii][jj]/p_bkg_VAMCFM.mearray[ii][jj];
4827  else cout << 0;
4828  }
4829  cout << endl;
4830  }
4831  if (motherflavor==0 && vbfvhchannel<2){
4832  cout << "Bkg manual sum" << endl;
4833  cout << "\tMCFM" << endl;
4834  p_bkg_VAMCFM_rssum.printarray();
4835  cout << "\tMCFM Bkg (re-sum)/Bkg Ratio" << endl;
4836  bool wrongRatio=false;
4837  for (int ii=0; ii<nmsq; ii++){
4838  for (int jj=0; jj<nmsq; jj++){
4839  cout << '\t';
4840  float rr=0;
4841  if (p_bkg_VAMCFM.mearray[ii][jj]!=0.) rr = p_bkg_VAMCFM_rssum.mearray[ii][jj]/p_bkg_VAMCFM.mearray[ii][jj];
4842  else if (p_bkg_VAMCFM_rssum.mearray[ii][jj]!=0.) rr = -9999;
4843  cout << rr;
4844  if (rr!=0. && rr!=4.) wrongRatio=true;
4845  }
4846  cout << endl;
4847  }
4848 
4849  if (wrongRatio){ // Print all non-zero contributions in the manual sum
4850  for (int r=-5; r<=5; r++){
4851  for (int s=-5; s<=5; s++){
4852  MELACandidate* cand = mela.getCurrentCandidate();
4853  int idj[2] ={
4854  cand->getAssociatedJet(0)->id,
4855  cand->getAssociatedJet(1)->id
4856  };
4857 
4858  cand->getAssociatedJet(0)->id=r;
4859  cand->getAssociatedJet(1)->id=s;
4860  mcfmme p_bkg_VAMCFM_rsindiv;
4861  mela.computeProdDecP(p_bkg_VAMCFM_rsindiv.proddecme, false);
4862  mela.getIORecord()->getUnweightedMEArray(p_bkg_VAMCFM_rsindiv.mearray);
4863  if (p_bkg_VAMCFM_rsindiv.proddecme>0.){
4864  mela.setVerbosity(TVar::DEBUG_VERBOSE);
4865  mela.computeProdDecP(p_bkg_VAMCFM_rsindiv.proddecme, false);
4866  cout << endl;
4867  cout << "Outgoing id1, id2 = " << r << " , " << s << endl;
4868 
4869  for (int ii=0; ii<nmsq; ii++){
4870  for (int jj=0; jj<nmsq; jj++){
4871  cout << '\t';
4872  cout << p_bkg_VAMCFM_rsindiv.mearray[ii][jj];
4873  }
4874  cout << endl;
4875  }
4876 
4877  cout << endl;
4878  mela.setVerbosity(verbosity);
4879  }
4880  cand->getAssociatedJet(0)->id=idj[0];
4881  cand->getAssociatedJet(1)->id=idj[1];
4882  }
4883  }
4884  }
4885 
4886  }
4887 
4888  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
4889 
4890  mela.resetInputEvent();
4891 
4892  // Reset the CKM elements so that they don't transfer to the next function call
4893  TUtil::SetCKMElements(&bkpvckm_ud, &bkpvckm_us, &bkpvckm_cd, &bkpvckm_cs, &bkpvckm_ts, &bkpvckm_tb, &bkpvckm_ub, &bkpvckm_cb, &bkpvckm_td);
4894 
4895  // Reset the buffer
4896  cout.rdbuf(coutbuf);
4897  tout.close();
4898  mela.setVerbosity(bkpverbosity);
4899  }
4900 }
4901 
4902 void testME_ProdDec_MCFM_JHUGen_JJQCDZZWW_Comparison_Ping(int motherflavor=0, int decZZWW=1 /*1==ZZ, 2==WW*/, int hasInterf=0 /*0==2l2l, 1==4l*/, shared_ptr<Mela> melaptr=nullptr){
4903  if (hasInterf==1 && decZZWW==2) return;
4904  TString outname;
4905  if (decZZWW==1) outname = Form("testME_ProdDec_MCFM_JHUGen_JJQCDZZ_Comparison_Ping_%i_%s.out", motherflavor, (hasInterf ? "4l" : "2l2l"));
4906  else if (decZZWW==2) outname = Form("testME_ProdDec_MCFM_JHUGen_JJQCDWW_Comparison_Ping_%i.out", motherflavor);
4907  else return;
4908 
4909  struct mcfmme{
4910  float proddecme;
4911  double mearray[nmsq][nmsq];
4912  mcfmme(){
4913  proddecme=0;
4914  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]=0; }
4915  }
4916  void add(const mcfmme& other){
4917  proddecme+=other.proddecme;
4918  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]+=(other.mearray)[ii][jj]; }
4919  }
4920  void multiplyarray(const float val){
4921  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]*=val; }
4922  }
4923  void printarray(){
4924  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) cout << '\t' << mearray[ii][jj]; cout << endl; }
4925  }
4926  };
4927 
4928  int erg_tev=13;
4929  float mPOLE=125.0;
4930  float wPOLE=4.07e-3;
4931 
4932  bool doEval=true;
4933  int idMother[2]={ 0 };
4934  if (motherflavor==0){}
4935  else if (motherflavor==1){ idMother[0]=2; idMother[1]=-2; }
4936  else if (motherflavor==2){ idMother[0]=4; idMother[1]=-4; }
4937  else if (motherflavor==3){ idMother[0]=-4; idMother[1]=2; }
4938  else if (motherflavor==4){ idMother[0]=-2; idMother[1]=4; }
4939  else if (motherflavor==5){ idMother[0]=1; idMother[1]=-1; }
4940  else if (motherflavor==6){ idMother[0]=3; idMother[1]=-3; }
4941  else if (motherflavor==7){ idMother[0]=5; idMother[1]=-5; }
4942  else if (motherflavor==8){ idMother[0]=-3; idMother[1]=1; }
4943  else if (motherflavor==9){ idMother[0]=-5; idMother[1]=1; }
4944  else if (motherflavor==10){ idMother[0]=-1; idMother[1]=3; }
4945  else if (motherflavor==11){ idMother[0]=-1; idMother[1]=5; }
4946 
4947  else if (motherflavor==12){ idMother[0]=1; idMother[1]=1; }
4948  else if (motherflavor==13){ idMother[0]=2; idMother[1]=2; }
4949  else if (motherflavor==14){ idMother[0]=3; idMother[1]=3; }
4950  else if (motherflavor==15){ idMother[0]=4; idMother[1]=4; }
4951  else if (motherflavor==16){ idMother[0]=5; idMother[1]=5; }
4952 
4953  else if (motherflavor==17){ idMother[0]=1; idMother[1]=21; }
4954  else if (motherflavor==18){ idMother[0]=21; idMother[1]=3; }
4955  else if (motherflavor==19){ idMother[0]=21; idMother[1]=5; }
4956  else if (motherflavor==20){ idMother[0]=-1; idMother[1]=21; }
4957  else if (motherflavor==21){ idMother[0]=21; idMother[1]=-3; }
4958  else if (motherflavor==22){ idMother[0]=21; idMother[1]=-5; }
4959  else if (motherflavor==23){ idMother[0]=2; idMother[1]=21; }
4960  else if (motherflavor==24){ idMother[0]=21; idMother[1]=4; }
4961  else if (motherflavor==25){ idMother[0]=-2; idMother[1]=21; }
4962  else if (motherflavor==26){ idMother[0]=21; idMother[1]=-4; }
4963  else if (motherflavor==27){ idMother[0]=21; idMother[1]=21; }
4964 
4965  else if (motherflavor==28){ idMother[0]=1; idMother[1]=0; }
4966  else if (motherflavor==29){ idMother[0]=-1; idMother[1]=0; }
4967  else if (motherflavor==30){ idMother[0]=2; idMother[1]=0; }
4968  else if (motherflavor==31){ idMother[0]=-2; idMother[1]=0; }
4969  else if (motherflavor==32){ idMother[0]=3; idMother[1]=0; }
4970  else if (motherflavor==33){ idMother[0]=-3; idMother[1]=0; }
4971  else if (motherflavor==34){ idMother[0]=4; idMother[1]=0; }
4972  else if (motherflavor==35){ idMother[0]=-4; idMother[1]=0; }
4973  else if (motherflavor==36){ idMother[0]=5; idMother[1]=0; }
4974  else if (motherflavor==37){ idMother[0]=-5; idMother[1]=0; }
4975  else if (motherflavor==38){ idMother[0]=21; idMother[1]=0; }
4976 
4977  else doEval=false;
4978 
4979  if (doEval){
4980  ofstream tout(outname.Data());
4981  streambuf* coutbuf = cout.rdbuf();
4982  cout.rdbuf(tout.rdbuf());
4983 
4984  TVar::VerbosityLevel verbosity = TVar::ERROR;
4986 
4987  if (!melaptr) {
4988  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
4989  }
4990  Mela& mela = *melaptr;
4991  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
4992  mela.setVerbosity(verbosity);
4993 
4994  mcfmme p_prod_JJQCD_VAMCFM, p_prod_JJQCD_VAMCFM_rssum;
4995 
4996  float mzz = 0;
4997  float mjj = 0;
4998 
4999  float pingMom[8][4]={
5000  { 0, 0, 865.37881546721542, 865.37881546721542 },
5001  { 0, 0, -624.03396598421773, 624.03396598421773 },
5002  { 7.6145299215002638, -17.259247740062808, 9.4660586470659975, 21.106135714241464 },
5003  { 90.901719112641416, -69.683681833050798, 32.066319224729980, 118.94194752090492 },
5004  { 78.476352131782917, -35.264818847819797, -8.8615639484695272, 86.490881645951262 },
5005  { 191.68369742375290, -197.85205601463366, 100.99437243828194, 293.40746273989180 },
5006  { -131.59521398083137, 330.56000090294270, 437.01695094737875, 563.53440884737279 },
5007  { -237.08108460884614, -10.500196467375645, -329.33728782598945, 405.93194498307093 }
5008  };
5009 
5010  int GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
5011  if (decZZWW==1){
5012  GenLep1Id=13;
5013  GenLep2Id=-13;
5014  if (hasInterf==0){
5015  GenLep3Id=11;
5016  GenLep4Id=-11;
5017  }
5018  else{
5019  GenLep3Id=GenLep1Id;
5020  GenLep4Id=GenLep2Id;
5021  }
5022  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
5023  }
5024  else{
5025  GenLep1Id=13;
5026  GenLep2Id=-14;
5027  GenLep3Id=12;
5028  GenLep4Id=-11;
5029  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
5030  }
5031 
5032  int idOrdered[4] ={ GenLep1Id, GenLep2Id, GenLep3Id, GenLep4Id };
5033 
5035  for (unsigned int ip=0; ip<2; ip++){
5036  mothers.push_back(
5038  0,
5039  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5040  )
5041  );
5042  };
5044  for (unsigned int ip=2; ip<6; ip++){
5045  daughters.push_back(
5047  idOrdered[ip-2],
5048  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5049  )
5050  );
5051  };
5053  for (unsigned int ip=6; ip<8; ip++){
5054  associated.push_back(
5056  idMother[ip-6], // Is this wrong? No, not really. We want to check all initial particles.
5057  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5058  )
5059  );
5060  };
5061  mjj = (associated.at(0).second+associated.at(1).second).M();
5062  mzz = (daughters.at(0).second+daughters.at(1).second+daughters.at(2).second+daughters.at(3).second).M();
5063 
5064  mela.setInputEvent(&daughters, &associated, &mothers, true);
5065 
5066  /***** MCFM *****/
5067 
5068  mela.setProcess((decZZWW==1 ? TVar::bkgZZ : TVar::bkgWW), TVar::MCFM, prod);
5069 
5070  mela.computeProdDecP(p_prod_JJQCD_VAMCFM.proddecme, false);
5071  mela.getIORecord()->getUnweightedMEArray(p_prod_JJQCD_VAMCFM.mearray);
5072  if (motherflavor==0){
5073  for (int r=-5; r<=21; r++){
5074  if (r>5 && r<21) continue;
5075  for (int s=-5; s<=21; s++){
5076  if (s>5 && s<21) continue;
5077  MELACandidate* cand = mela.getCurrentCandidate();
5078  int idj[2] ={
5079  cand->getAssociatedJet(0)->id,
5080  cand->getAssociatedJet(1)->id
5081  };
5082 
5083  cand->getAssociatedJet(0)->id=r;
5084  cand->getAssociatedJet(1)->id=s;
5085  mcfmme p_prod_JJQCD_VAMCFM_rsindiv;
5086  mela.computeProdDecP(p_prod_JJQCD_VAMCFM_rsindiv.proddecme, false);
5087  mela.getIORecord()->getUnweightedMEArray(p_prod_JJQCD_VAMCFM_rsindiv.mearray);
5088  p_prod_JJQCD_VAMCFM_rssum.add(p_prod_JJQCD_VAMCFM_rsindiv);
5089  cand->getAssociatedJet(0)->id=idj[0];
5090  cand->getAssociatedJet(1)->id=idj[1];
5091  }
5092  }
5093  }
5094 
5095  cout << "Production variables:\n";
5096  cout << "\tmZZ = " << mzz << endl;
5097  cout << "\tmJJ = " << mjj << endl;
5098  cout << "MEsq:" << endl;
5099  cout << "\tMCFM ME: " << p_prod_JJQCD_VAMCFM.proddecme << endl;
5100  cout << "\tArray:" << endl;
5101  p_prod_JJQCD_VAMCFM.printarray();
5102  if (motherflavor==0){
5103  cout << "Bkg manual sum" << endl;
5104  cout << "\tMCFM" << endl;
5105  p_prod_JJQCD_VAMCFM_rssum.printarray();
5106  cout << "\tMCFM Bkg (re-sum)/Bkg Ratio" << endl;
5107  bool wrongRatio=false;
5108  vector<pair<int, int>> wrongRatioArray;
5109  for (int ii=0; ii<nmsq; ii++){
5110  for (int jj=0; jj<nmsq; jj++){
5111  cout << '\t';
5112  float rr=0;
5113  if (p_prod_JJQCD_VAMCFM.mearray[ii][jj]!=0.) rr = p_prod_JJQCD_VAMCFM_rssum.mearray[ii][jj]/p_prod_JJQCD_VAMCFM.mearray[ii][jj];
5114  else if (p_prod_JJQCD_VAMCFM_rssum.mearray[ii][jj]!=0.) rr = -9999;
5115  cout << rr;
5116  if (rr!=0. && rr!=4.){
5117  wrongRatio=true;
5118  wrongRatioArray.push_back(pair<int, int>(ii, jj));
5119  }
5120  }
5121  cout << endl;
5122  }
5123  if (wrongRatio){ // Print all non-zero contributions in the manual sum
5124  for (int r=-5; r<=21; r++){
5125  if (r>5 && r<21) continue;
5126  for (int s=-5; s<=21; s++){
5127  if (s>5 && s<21) continue;
5128  MELACandidate* cand = mela.getCurrentCandidate();
5129  int idj[2] ={
5130  cand->getAssociatedJet(0)->id,
5131  cand->getAssociatedJet(1)->id
5132  };
5133 
5134  cand->getAssociatedJet(0)->id=r;
5135  cand->getAssociatedJet(1)->id=s;
5136  mcfmme p_prod_JJQCD_VAMCFM_rsindiv;
5137  mela.computeProdDecP(p_prod_JJQCD_VAMCFM_rsindiv.proddecme, false);
5138  mela.getIORecord()->getUnweightedMEArray(p_prod_JJQCD_VAMCFM_rsindiv.mearray);
5139  if (p_prod_JJQCD_VAMCFM_rsindiv.proddecme>0.){
5140  mela.computeProdDecP(p_prod_JJQCD_VAMCFM_rsindiv.proddecme, false);
5141  bool hasCorrespondance=false;
5142  for (auto& p:wrongRatioArray){
5143  for (int ii=0; ii<nmsq; ii++){
5144  for (int jj=0; jj<nmsq; jj++){
5145  if (p.first==ii && p.second==jj && p_prod_JJQCD_VAMCFM_rsindiv.mearray[ii][jj]!=0.) hasCorrespondance=true;
5146  if (hasCorrespondance) break;
5147  }
5148  if (hasCorrespondance) break;
5149  }
5150  if (hasCorrespondance) break;
5151  }
5152  if (hasCorrespondance){
5153  //mela.setVerbosity(TVar::DEBUG_VERBOSE);
5154  //mela.computeProdDecP(p_prod_JJQCD_VAMCFM_rsindiv.proddecme, false);
5155 
5156  cout << endl;
5157  cout << "Outgoing id1, id2 = " << r << " , " << s << endl;
5158 
5159  for (int ii=0; ii<nmsq; ii++){
5160  for (int jj=0; jj<nmsq; jj++){
5161  cout << '\t';
5162  cout << p_prod_JJQCD_VAMCFM_rsindiv.mearray[ii][jj];
5163  }
5164  cout << endl;
5165  }
5166 
5167  cout << endl;
5168  }
5169  mela.setVerbosity(verbosity);
5170  }
5171  cand->getAssociatedJet(0)->id=idj[0];
5172  cand->getAssociatedJet(1)->id=idj[1];
5173  }
5174  }
5175  }
5176 
5177  }
5178 
5179  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
5180 
5181  mela.resetInputEvent();
5182 
5183  cout.rdbuf(coutbuf);
5184  tout.close();
5185  mela.setVerbosity(bkpverbosity);
5186  }
5187 }
5188 
5189 void testME_ProdDec_MCFM_JHUGen_WBFZZWW_TU_Comparison_Ping(int motherflavor=0, int isZZWW=0 /*1==ZZ, 2==WW*/, int vbfvhchannel=1 /*0==VBF, 1==HadVH, 2==LepVH*/, shared_ptr<Mela> melaptr=nullptr){
5190  if (vbfvhchannel<1 || vbfvhchannel>2) return;
5191  TString outname;
5192  if (isZZWW==1) outname = Form("testME_ProdDec_MCFM_JHUGen_WBFZZ_TU_Comparison_Ping_%i_%i_%i.out", motherflavor, isZZWW, vbfvhchannel);
5193  else if (isZZWW==2) outname = Form("testME_ProdDec_MCFM_JHUGen_WBFWW_TU_Comparison_Ping_%i_%i_%i.out", motherflavor, isZZWW, vbfvhchannel);
5194  else return;
5195 
5196  struct mcfmme{
5197  float proddecme;
5198  double mearray[nmsq][nmsq];
5199  mcfmme(){
5200  proddecme=0;
5201  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]=0; }
5202  }
5203  void add(const mcfmme& other){
5204  proddecme+=other.proddecme;
5205  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]+=(other.mearray)[ii][jj]; }
5206  }
5207  void multiplyarray(const float val){
5208  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) mearray[ii][jj]*=val; }
5209  }
5210  void printarray(){
5211  for (int ii=0; ii<nmsq; ii++){ for (int jj=0; jj<nmsq; jj++) cout << '\t' << mearray[ii][jj]; cout << endl; }
5212  }
5213  };
5214 
5215  int erg_tev=13;
5216  float mPOLE=125.0;
5217  float wPOLE=4.07e-3;
5218 
5219  TVar::VerbosityLevel verbosity = TVar::ERROR;
5220 
5221  bool doEval=false;
5222  int idMother[2]={ 0 };
5223  if (vbfvhchannel<=1){
5224  // VBF ZZ-only(+)WH
5225  if (motherflavor==1){
5226  idMother[0]=2; idMother[1]=-1;
5227  doEval =
5228  (isZZWW==2 && vbfvhchannel>=1);
5229  }
5230  else if (motherflavor==2){
5231  idMother[0]=-2; idMother[1]=1;
5232  doEval =
5233  (isZZWW==2 && vbfvhchannel>=1);
5234  }
5235  // VBF ZZ(+)ZH or WW(+)ZH
5236  else if (motherflavor==3){
5237  idMother[0]=2; idMother[1]=-2;
5238  doEval =
5239  (isZZWW==1 && vbfvhchannel>=1);
5240  }
5241  else if (motherflavor==4){
5242  idMother[0]=-2; idMother[1]=2;
5243  doEval =
5244  (isZZWW==1 && vbfvhchannel>=1);
5245  }
5246  else if (motherflavor==5){
5247  idMother[0]=1; idMother[1]=-1;
5248  doEval =
5249  (isZZWW==1 && vbfvhchannel>=1);
5250  }
5251  else if (motherflavor==6){
5252  idMother[0]=-1; idMother[1]=1;
5253  doEval =
5254  (isZZWW==1 && vbfvhchannel>=1);
5255  }
5256  // VBF ZZ-only(+)WH
5257  else if (motherflavor==7){
5258  idMother[0]=4; idMother[1]=-3;
5259  doEval =
5260  (isZZWW==2 && vbfvhchannel>=1);
5261  }
5262  else if (motherflavor==8){
5263  idMother[0]=4; idMother[1]=-1;
5264  doEval =
5265  (isZZWW==2 && vbfvhchannel>=1);
5266  }
5267  else if (motherflavor==9){
5268  idMother[0]=2; idMother[1]=-3;
5269  doEval =
5270  (isZZWW==2 && vbfvhchannel>=1);
5271  }
5272  else if (motherflavor==10){
5273  idMother[0]=-4; idMother[1]=3;
5274  doEval =
5275  (isZZWW==2 && vbfvhchannel>=1);
5276  }
5277  else if (motherflavor==11){
5278  idMother[0]=-4; idMother[1]=1;
5279  doEval =
5280  (isZZWW==2 && vbfvhchannel>=1);
5281  }
5282  else if (motherflavor==12){
5283  idMother[0]=-2; idMother[1]=3;
5284  doEval =
5285  (isZZWW==2 && vbfvhchannel>=1);
5286  }
5287  // VBF ZZ(+)ZH or WW(+)ZH
5288  else if (motherflavor==13){
5289  idMother[0]=4; idMother[1]=-4;
5290  doEval =
5291  (isZZWW==1 && vbfvhchannel>=1);
5292  }
5293  else if (motherflavor==14){
5294  idMother[0]=-4; idMother[1]=4;
5295  doEval =
5296  (isZZWW==1 && vbfvhchannel>=1);
5297  }
5298  else if (motherflavor==15){
5299  idMother[0]=3; idMother[1]=-3;
5300  doEval =
5301  (isZZWW==1 && vbfvhchannel>=1);
5302  }
5303  else if (motherflavor==16){
5304  idMother[0]=-3; idMother[1]=3;
5305  doEval =
5306  (isZZWW==1 && vbfvhchannel>=1);
5307  }
5308  else if (motherflavor==17){
5309  idMother[0]=5; idMother[1]=-5;
5310  doEval =
5311  (isZZWW==1 && vbfvhchannel>=1);
5312  }
5313  else if (motherflavor==18){
5314  idMother[0]=-5; idMother[1]=5;
5315  doEval =
5316  (isZZWW==1 && vbfvhchannel>=1);
5317  }
5318  }
5319  else if (vbfvhchannel==2){
5320  // VBF ZZ-only(+)WH
5321  if (motherflavor==1){
5322  idMother[0]=14; idMother[1]=-13;
5323  doEval =
5324  (isZZWW==2 && vbfvhchannel>=1);
5325  }
5326  else if (motherflavor==2){
5327  idMother[0]=-14; idMother[1]=13;
5328  doEval =
5329  (isZZWW==2 && vbfvhchannel>=1);
5330  }
5331  // VBF ZZ(+)ZH or WW(+)ZH
5332  else if (motherflavor==3){
5333  idMother[0]=14; idMother[1]=-14;
5334  doEval =
5335  (isZZWW==1 && vbfvhchannel>=1);
5336  }
5337  else if (motherflavor==4){
5338  idMother[0]=-14; idMother[1]=14;
5339  doEval =
5340  (isZZWW==1 && vbfvhchannel>=1);
5341  }
5342  else if (motherflavor==5){
5343  idMother[0]=13; idMother[1]=-13;
5344  doEval =
5345  (isZZWW==1 && vbfvhchannel>=1);
5346  }
5347  else if (motherflavor==6){
5348  idMother[0]=-13; idMother[1]=13;
5349  doEval =
5350  (isZZWW==1 && vbfvhchannel>=1);
5351  }
5352  }
5353 
5354  TVar::Production prod, prod_tu, prod_stu;
5355  if (vbfvhchannel==1){
5356  if (
5357  (idMother[0]==-idMother[1] && idMother[0]!=0)
5358  ) prod=TVar::Had_ZH_S;
5359  else if (
5360  (TMath::Sign(1, idMother[0])==-TMath::Sign(1, idMother[1]) && abs(idMother[0])%2!=abs(idMother[1])%2)
5361  ) prod=TVar::Had_WH_S;
5362  else doEval=false;
5363  }
5364  else if (vbfvhchannel==2){
5365  if (idMother[0]==-idMother[1] && idMother[0]!=0) prod=TVar::Lep_ZH_S;
5366  else if (TMath::Sign(1, idMother[0])==-TMath::Sign(1, idMother[1]) && abs(idMother[0])%2!=abs(idMother[1])%2) prod=TVar::Lep_WH_S;
5367  else doEval=false;
5368  }
5369  else doEval=false;
5370 
5371  if (prod==TVar::Had_ZH_S){
5372  prod_tu=TVar::Had_ZH_TU;
5373  prod_stu=TVar::Had_ZH;
5374  }
5375  else if (prod==TVar::Had_WH_S){
5376  prod_tu=TVar::Had_WH_TU;
5377  prod_stu=TVar::Had_WH;
5378  }
5379  else if (prod==TVar::Lep_ZH_S){
5380  prod_tu=TVar::Lep_ZH_TU;
5381  prod_stu=TVar::Lep_ZH;
5382  }
5383  else if (prod==TVar::Lep_WH_S){
5384  prod_tu=TVar::Lep_WH_TU;
5385  prod_stu=TVar::Lep_WH;
5386  }
5387  else doEval=false;
5388 
5389  if (doEval){
5390  ofstream tout(outname.Data());
5391  streambuf* coutbuf = cout.rdbuf();
5392  cout.rdbuf(tout.rdbuf());
5393 
5394  if (!melaptr) {
5395  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
5396  }
5397  Mela& mela = *melaptr;
5398  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
5399  mela.setVerbosity(verbosity);
5400 
5401  mcfmme p_bkg_VAMCFM;
5402  mcfmme p_prod_0mplus_dec_0mplus_VAMCFM;
5403  mcfmme p_prod_0minus_dec_0minus_VAMCFM;
5404  mcfmme p_prod_fa3_dec_fa3_VAMCFM;
5405  mcfmme p_prod_0minusZA_dec_0minusZA_VAMCFM;
5406  mcfmme p_prod_fa3ZA_dec_fa3ZA_VAMCFM;
5407  mcfmme p_prod_0minusAA_dec_0minusAA_VAMCFM;
5408  mcfmme p_prod_fa3AA_dec_fa3AA_VAMCFM;
5409 
5410  mcfmme p_bkg_tu_VAMCFM;
5411  mcfmme p_prod_tu_0mplus_dec_0mplus_VAMCFM;
5412  mcfmme p_prod_tu_0minus_dec_0minus_VAMCFM;
5413  mcfmme p_prod_tu_fa3_dec_fa3_VAMCFM;
5414  mcfmme p_prod_tu_0minusZA_dec_0minusZA_VAMCFM;
5415  mcfmme p_prod_tu_fa3ZA_dec_fa3ZA_VAMCFM;
5416  mcfmme p_prod_tu_0minusAA_dec_0minusAA_VAMCFM;
5417  mcfmme p_prod_tu_fa3AA_dec_fa3AA_VAMCFM;
5418 
5419  mcfmme p_bkg_stu_VAMCFM;
5420  mcfmme p_prod_stu_0mplus_dec_0mplus_VAMCFM;
5421  mcfmme p_prod_stu_0minus_dec_0minus_VAMCFM;
5422  mcfmme p_prod_stu_fa3_dec_fa3_VAMCFM;
5423  mcfmme p_prod_stu_0minusZA_dec_0minusZA_VAMCFM;
5424  mcfmme p_prod_stu_fa3ZA_dec_fa3ZA_VAMCFM;
5425  mcfmme p_prod_stu_0minusAA_dec_0minusAA_VAMCFM;
5426  mcfmme p_prod_stu_fa3AA_dec_fa3AA_VAMCFM;
5427 
5428  float mzz = 0;
5429  float mjj = 0;
5430  float mjjzz = 0;
5431  float sysZ = 0.;
5432 
5433  float costhetastar=0;
5434  float costheta1=0;
5435  float costheta2=0;
5436  float Phi=0;
5437  float Phi1=0;
5438  float Q2V1=0;
5439  float Q2V2=0;
5440  float mVstar=0, mV=0;
5441 
5442  float pingMom[8][4]={
5443  { 0, 0, 865.37881546721542, 865.37881546721542 },
5444  { 0, 0, -624.03396598421773, 624.03396598421773 },
5445  { 7.6145299215002638, -17.259247740062808, 9.4660586470659975, 21.106135714241464 },
5446  { 90.901719112641416, -69.683681833050798, 32.066319224729980, 118.94194752090492 },
5447  { 78.476352131782917, -35.264818847819797, -8.8615639484695272, 86.490881645951262 },
5448  { 191.68369742375290, -197.85205601463366, 100.99437243828194, 293.40746273989180 },
5449  { -131.59521398083137, 330.56000090294270, 437.01695094737875, 563.53440884737279 },
5450  { -237.08108460884614, -10.500196467375645, -329.33728782598945, 405.93194498307093 }
5451  };
5452 
5453  int GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
5454  if (isZZWW==1){
5455  GenLep1Id=13;
5456  GenLep2Id=-13;
5457  GenLep3Id=11;
5458  GenLep4Id=-11;
5459  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
5460  }
5461  else{
5462  GenLep1Id=13;
5463  GenLep2Id=-14;
5464  GenLep3Id=12;
5465  GenLep4Id=-11;
5466  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
5467  }
5468  int idOrdered[4] ={ GenLep1Id, GenLep2Id, GenLep3Id, GenLep4Id };
5469 
5471  for (unsigned int ip=0; ip<2; ip++){
5472  mothers.push_back(
5474  0,
5475  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5476  )
5477  );
5478  };
5480  for (unsigned int ip=2; ip<6; ip++){
5481  daughters.push_back(
5483  idOrdered[ip-2],
5484  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5485  )
5486  );
5487  };
5489  for (unsigned int ip=6; ip<8; ip++){
5490  associated.push_back(
5492  idMother[ip-6], // Is this wrong? No, not really. We want to check all initial particles.
5493  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5494  )
5495  );
5496  };
5497  mjj = (associated.at(0).second+associated.at(1).second).M();
5498  mzz = (daughters.at(0).second+daughters.at(1).second+daughters.at(2).second+daughters.at(3).second).M();
5499 
5500  mela.setInputEvent(&daughters, &associated, &mothers, true);
5501 
5502  SimpleParticleCollection_t daughters_tu;
5503  SimpleParticleCollection_t associated_tu;
5504  if (isZZWW==1 || (isZZWW==2 && (idMother[0]+idMother[1])>0)){
5505  for (unsigned int ip=2; ip<4; ip++){
5506  daughters_tu.push_back(
5508  idOrdered[ip-2],
5509  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5510  )
5511  );
5512  };
5513  for (unsigned int ip=4; ip<6; ip++){
5514  associated_tu.push_back(
5516  idOrdered[ip-2],
5517  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5518  )
5519  );
5520  };
5521  for (unsigned int ip=6; ip<8; ip++){
5522  daughters_tu.push_back(
5524  idMother[ip-6], // Is this wrong? No, not really. We want to check all initial particles.
5525  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5526  )
5527  );
5528  };
5529  }
5530  else{
5531  for (unsigned int ip=2; ip<4; ip++){
5532  associated_tu.push_back(
5534  idOrdered[ip-2],
5535  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5536  )
5537  );
5538  };
5539  for (unsigned int ip=4; ip<6; ip++){
5540  daughters_tu.push_back(
5542  idOrdered[ip-2],
5543  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5544  )
5545  );
5546  };
5547  for (unsigned int ip=6; ip<8; ip++){
5548  daughters_tu.push_back(
5550  idMother[ip-6], // Is this wrong? No, not really. We want to check all initial particles.
5551  TLorentzVector(pingMom[ip][0], pingMom[ip][1], pingMom[ip][2], pingMom[ip][3])
5552  )
5553  );
5554  };
5555  }
5556  mela.setInputEvent(&daughters_tu, &associated_tu, &mothers, true);
5557 
5558  if (mothers.size()>1){
5559  if (vbfvhchannel==0) TUtil::computeVBFAngles(
5560  costhetastar,
5561  costheta1,
5562  costheta2,
5563  Phi,
5564  Phi1,
5565  Q2V1,
5566  Q2V2,
5567 
5568  daughters.at(0).second, daughters.at(0).first,
5569  daughters.at(1).second, daughters.at(1).first,
5570  daughters.at(2).second, daughters.at(2).first,
5571  daughters.at(3).second, daughters.at(3).first,
5572 
5573  associated.at(0).second, associated.at(0).first,
5574  associated.at(1).second, associated.at(1).first,
5575 
5576  &(mothers.at(0).second), mothers.at(0).first,
5577  &(mothers.at(1).second), mothers.at(1).first
5578  );
5580  costhetastar,
5581  costheta1,
5582  costheta2,
5583  Phi,
5584  Phi1,
5585  mVstar,
5586  mV,
5587 
5588  daughters.at(0).second, daughters.at(0).first,
5589  daughters.at(1).second, daughters.at(1).first,
5590  daughters.at(2).second, daughters.at(2).first,
5591  daughters.at(3).second, daughters.at(3).first,
5592 
5593  associated.at(0).second, associated.at(0).first,
5594  associated.at(1).second, associated.at(1).first,
5595 
5596  &(mothers.at(0).second), mothers.at(0).first,
5597  &(mothers.at(1).second), mothers.at(1).first
5598  );
5599  }
5600  else{
5601  if (vbfvhchannel==0) TUtil::computeVBFAngles(
5602  costhetastar,
5603  costheta1,
5604  costheta2,
5605  Phi,
5606  Phi1,
5607  Q2V1,
5608  Q2V2,
5609 
5610  daughters.at(0).second, daughters.at(0).first,
5611  daughters.at(1).second, daughters.at(1).first,
5612  daughters.at(2).second, daughters.at(2).first,
5613  daughters.at(3).second, daughters.at(3).first,
5614 
5615  associated.at(0).second, associated.at(0).first,
5616  associated.at(1).second, associated.at(1).first
5617  );
5619  costhetastar,
5620  costheta1,
5621  costheta2,
5622  Phi,
5623  Phi1,
5624  mVstar,
5625  mV,
5626 
5627  daughters.at(0).second, daughters.at(0).first,
5628  daughters.at(1).second, daughters.at(1).first,
5629  daughters.at(2).second, daughters.at(2).first,
5630  daughters.at(3).second, daughters.at(3).first,
5631 
5632  associated.at(0).second, associated.at(0).first,
5633  associated.at(1).second, associated.at(1).first
5634  );
5635  }
5636 
5637  // Back-up CKM
5638  double bkpvckm_ud=TUtil::GetCKMElement(2, 1);
5639  double bkpvckm_us=TUtil::GetCKMElement(2, 3);
5640  double bkpvckm_ub=TUtil::GetCKMElement(2, 5);
5641  double bkpvckm_cd=TUtil::GetCKMElement(4, 1);
5642  double bkpvckm_cs=TUtil::GetCKMElement(4, 3);
5643  double bkpvckm_cb=TUtil::GetCKMElement(4, 5);
5644  double bkpvckm_ts=TUtil::GetCKMElement(6, 1);
5645  double bkpvckm_tb=TUtil::GetCKMElement(6, 3);
5646  double bkpvckm_td=TUtil::GetCKMElement(6, 5);
5647  // Set CKM to be diagonal for this test
5648  double invckm_ud=1, invckm_us=0, invckm_cd=0, invckm_cs=1, invckm_ts=0, invckm_tb=1, invckm_ub=0, invckm_cb=0, invckm_td=0;
5649  TUtil::SetCKMElements(&invckm_ud, &invckm_us, &invckm_cd, &invckm_cs, &invckm_ts, &invckm_tb, &invckm_ub, &invckm_cb, &invckm_td);
5650  MELACandidate* cand;
5651 
5652  /***** MCFM *****/
5653  mela.setCurrentCandidateFromIndex(1);
5654  cand = mela.getCurrentCandidate();
5658  else prod=TVar::Lep_ZH_S;
5659  }
5662  else prod=TVar::Had_ZH_S;
5663  }
5664 
5665  // Reset these in case the function needs to be repeated
5666  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
5667  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
5668 
5669  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, prod);
5670  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5671  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
5672  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
5673  mela.computeProdDecP(p_prod_0mplus_dec_0mplus_VAMCFM.proddecme, false);
5674  mela.getIORecord()->getUnweightedMEArray(p_prod_0mplus_dec_0mplus_VAMCFM.mearray);
5675 
5676  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5677  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
5678  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
5679  mela.computeProdDecP(p_prod_0minus_dec_0minus_VAMCFM.proddecme, false);
5680  mela.getIORecord()->getUnweightedMEArray(p_prod_0minus_dec_0minus_VAMCFM.mearray);
5681 
5682  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5683  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
5684  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
5685  mela.computeProdDecP(p_prod_fa3_dec_fa3_VAMCFM.proddecme, false);
5686  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3_dec_fa3_VAMCFM.mearray);
5687 
5688  // Test ZA and AA couplings in WWZZ in WBFZZ or ampvbf in WBFWW as well
5689  bool testZAcoupl=true;
5690  if (vbfvhchannel>=1){
5691  if (isZZWW==1){ // ZH->ZZ
5692  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
5693  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
5694  }
5695  else testZAcoupl=false;
5696  }
5697 
5698  if (testZAcoupl){
5699  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5700  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
5701  mela.differentiate_HWW_HZZ=true;
5702  mela.computeProdDecP(p_prod_0minusZA_dec_0minusZA_VAMCFM.proddecme, false);
5703  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusZA_dec_0minusZA_VAMCFM.mearray);
5704 
5705  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5706  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
5707  mela.differentiate_HWW_HZZ=true;
5708  mela.computeProdDecP(p_prod_0minusAA_dec_0minusAA_VAMCFM.proddecme, false);
5709  mela.getIORecord()->getUnweightedMEArray(p_prod_0minusAA_dec_0minusAA_VAMCFM.mearray);
5710 
5711  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5712  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
5713  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
5714  mela.differentiate_HWW_HZZ=true;
5715  mela.computeProdDecP(p_prod_fa3ZA_dec_fa3ZA_VAMCFM.proddecme, false);
5716  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3ZA_dec_fa3ZA_VAMCFM.mearray);
5717 
5718  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5719  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
5720  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
5721  mela.differentiate_HWW_HZZ=true;
5722  mela.computeProdDecP(p_prod_fa3AA_dec_fa3AA_VAMCFM.proddecme, false);
5723  mela.getIORecord()->getUnweightedMEArray(p_prod_fa3AA_dec_fa3AA_VAMCFM.mearray);
5724  }
5725 
5726  //mela.setVerbosity(TVar::DEBUG_VERBOSE);
5727  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5728  if (isZZWW==1) mela.setProcess(TVar::bkgZZ, TVar::MCFM, prod);
5729  else mela.setProcess(TVar::bkgWW, TVar::MCFM, prod);
5730  mela.computeProdDecP(p_bkg_VAMCFM.proddecme, false);
5731  mela.getIORecord()->getUnweightedMEArray(p_bkg_VAMCFM.mearray);
5732  //mela.setVerbosity(verbosity);
5733 
5734 
5735  mela.setCurrentCandidateFromIndex(0);
5736  cand = mela.getCurrentCandidate();
5738  if ((prod_tu==TVar::Had_WH_TU || prod_tu==TVar::Had_ZH_TU) && (PDGHelpers::isALepton(cand->getSortedV(2)->getDaughter(0)->id) || PDGHelpers::isANeutrino(cand->getSortedV(2)->getDaughter(0)->id))){
5739  if (prod_tu==TVar::Had_WH_TU) prod_tu=TVar::Lep_WH_TU;
5740  else prod_tu=TVar::Lep_ZH_TU;
5741  }
5742  else if ((prod_tu==TVar::Lep_WH_TU || prod_tu==TVar::Lep_ZH_TU) && PDGHelpers::isAJet(cand->getSortedV(2)->getDaughter(0)->id)){
5743  if (prod_tu==TVar::Lep_WH_TU) prod_tu=TVar::Had_WH_TU;
5744  else prod_tu=TVar::Had_ZH_TU;
5745  }
5746 
5747  // Reset these in case the function needs to be repeated
5748  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
5749  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
5750 
5751  cout << "MCFM production chosen: " << TVar::ProductionName(prod_tu) << endl;
5752  cout << "spinzerohiggs_anomcoupl_.AnomalCouplDK=" << spinzerohiggs_anomcoupl_.AnomalCouplDK << endl;
5753 
5754  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, prod_tu);
5755  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5756  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
5757  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.differentiate_HWW_HZZ=true; }
5758  mela.computeProdDecP(p_prod_tu_0mplus_dec_0mplus_VAMCFM.proddecme, false);
5759  mela.getIORecord()->getUnweightedMEArray(p_prod_tu_0mplus_dec_0mplus_VAMCFM.mearray);
5760 
5761  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5762  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
5763  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
5764  mela.computeProdDecP(p_prod_tu_0minus_dec_0minus_VAMCFM.proddecme, false);
5765  mela.getIORecord()->getUnweightedMEArray(p_prod_tu_0minus_dec_0minus_VAMCFM.mearray);
5766 
5767  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5768  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
5769  else{ mela.selfDHwwcoupl[0][gHIGGS_VV_1][0]=1; mela.selfDHwwcoupl[0][gHIGGS_VV_4][0]=1; mela.differentiate_HWW_HZZ=true; }
5770  mela.computeProdDecP(p_prod_tu_fa3_dec_fa3_VAMCFM.proddecme, false);
5771  mela.getIORecord()->getUnweightedMEArray(p_prod_tu_fa3_dec_fa3_VAMCFM.mearray);
5772 
5773  // Test ZA and AA couplings in WWZZ in WBFZZ or ampvbf in WBFWW as well
5774  testZAcoupl=true;
5775  if (vbfvhchannel>=1){
5776  if (isZZWW==1){ // ZH->ZZ
5777  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
5778  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
5779  }
5780  else testZAcoupl=false;
5781  }
5782 
5783  if (testZAcoupl){
5784  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5785  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
5786  mela.differentiate_HWW_HZZ=true;
5787  mela.computeProdDecP(p_prod_tu_0minusZA_dec_0minusZA_VAMCFM.proddecme, false);
5788  mela.getIORecord()->getUnweightedMEArray(p_prod_tu_0minusZA_dec_0minusZA_VAMCFM.mearray);
5789 
5790  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5791  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
5792  mela.differentiate_HWW_HZZ=true;
5793  mela.computeProdDecP(p_prod_tu_0minusAA_dec_0minusAA_VAMCFM.proddecme, false);
5794  mela.getIORecord()->getUnweightedMEArray(p_prod_tu_0minusAA_dec_0minusAA_VAMCFM.mearray);
5795 
5796  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5797  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
5798  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1;
5799  mela.differentiate_HWW_HZZ=true;
5800  mela.computeProdDecP(p_prod_tu_fa3ZA_dec_fa3ZA_VAMCFM.proddecme, false);
5801  mela.getIORecord()->getUnweightedMEArray(p_prod_tu_fa3ZA_dec_fa3ZA_VAMCFM.mearray);
5802 
5803  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5804  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
5805  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1;
5806  mela.differentiate_HWW_HZZ=true;
5807  mela.computeProdDecP(p_prod_tu_fa3AA_dec_fa3AA_VAMCFM.proddecme, false);
5808  mela.getIORecord()->getUnweightedMEArray(p_prod_tu_fa3AA_dec_fa3AA_VAMCFM.mearray);
5809  }
5810 
5811  //mela.setVerbosity(TVar::DEBUG_VERBOSE);
5812  mela.setRenFacScaleMode(TVar::Fixed_mH, TVar::Fixed_mH, 1, 1);
5813  if (isZZWW==1) mela.setProcess(TVar::bkgZZ, TVar::MCFM, prod_tu);
5814  else mela.setProcess(TVar::bkgWW, TVar::MCFM, prod_tu);
5815  mela.computeProdDecP(p_bkg_tu_VAMCFM.proddecme, false);
5816  mela.getIORecord()->getUnweightedMEArray(p_bkg_tu_VAMCFM.mearray);
5817  //mela.setVerbosity(verbosity);
5818 
5819  // Reset these in case the function needs to be repeated
5820  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
5821  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
5822 
5823  cout << "Production variables:\n";
5824  cout << "\tmJJ = " << mjj << endl;
5825  cout << "\tPhi = " << Phi << endl;
5826  cout << "Bkg" << endl;
5827  cout << "\tMCFM s ME: " << p_bkg_VAMCFM.proddecme << endl;
5828  cout << "\tMCFM tu ME: " << p_bkg_tu_VAMCFM.proddecme << endl;
5829  cout << "0mplus" << endl;
5830  cout << "\tMCFM s ME: " << p_prod_0mplus_dec_0mplus_VAMCFM.proddecme << endl;
5831  cout << "\tMCFM tu ME: " << p_prod_tu_0mplus_dec_0mplus_VAMCFM.proddecme << endl;
5832  cout << "0minus" << endl;
5833  cout << "\tMCFM s ME: " << p_prod_0minus_dec_0minus_VAMCFM.proddecme << endl;
5834  cout << "\tMCFM tu ME: " << p_prod_tu_0minus_dec_0minus_VAMCFM.proddecme << endl;
5835  cout << "fa3" << endl;
5836  cout << "\tMCFM s ME: " << p_prod_fa3_dec_fa3_VAMCFM.proddecme << endl;
5837  cout << "\tMCFM tu ME: " << p_prod_tu_fa3_dec_fa3_VAMCFM.proddecme << endl;
5838  cout << "0minusZA" << endl;
5839  cout << "\tMCFM s ME: " << p_prod_0minusZA_dec_0minusZA_VAMCFM.proddecme << endl;
5840  cout << "\tMCFM tu ME: " << p_prod_tu_0minusZA_dec_0minusZA_VAMCFM.proddecme << endl;
5841  cout << "fa3ZA" << endl;
5842  cout << "\tMCFM s ME: " << p_prod_fa3ZA_dec_fa3ZA_VAMCFM.proddecme << endl;
5843  cout << "\tMCFM tu ME: " << p_prod_tu_fa3ZA_dec_fa3ZA_VAMCFM.proddecme << endl;
5844  cout << "0minusAA" << endl;
5845  cout << "\tMCFM s ME: " << p_prod_0minusAA_dec_0minusAA_VAMCFM.proddecme << endl;
5846  cout << "\tMCFM tu ME: " << p_prod_tu_0minusAA_dec_0minusAA_VAMCFM.proddecme << endl;
5847  cout << "fa3AA" << endl;
5848  cout << "\tMCFM s ME: " << p_prod_fa3AA_dec_fa3AA_VAMCFM.proddecme << endl;
5849  cout << "\tMCFM tu ME: " << p_prod_tu_fa3AA_dec_fa3AA_VAMCFM.proddecme << endl;
5850 
5851  cout << "Arrays:" << endl;
5852  cout << "0mplus" << endl;
5853  cout << "\tMCFM s" << endl;
5854  p_prod_0mplus_dec_0mplus_VAMCFM.printarray();
5855  cout << "\tMCFM tu" << endl;
5856  p_prod_tu_0mplus_dec_0mplus_VAMCFM.printarray();
5857  cout << "0minus" << endl;
5858  cout << "\tMCFM s" << endl;
5859  p_prod_0minus_dec_0minus_VAMCFM.printarray();
5860  cout << "\tMCFM tu" << endl;
5861  p_prod_tu_0minus_dec_0minus_VAMCFM.printarray();
5862  cout << "fa3" << endl;
5863  cout << "\tMCFM s" << endl;
5864  p_prod_fa3_dec_fa3_VAMCFM.printarray();
5865  cout << "\tMCFM tu" << endl;
5866  p_prod_tu_fa3_dec_fa3_VAMCFM.printarray();
5867  cout << "0minusZA" << endl;
5868  cout << "\tMCFM s" << endl;
5869  p_prod_0minusZA_dec_0minusZA_VAMCFM.printarray();
5870  cout << "\tMCFM tu" << endl;
5871  p_prod_tu_0minusZA_dec_0minusZA_VAMCFM.printarray();
5872  cout << "fa3ZA" << endl;
5873  cout << "\tMCFM s" << endl;
5874  p_prod_fa3ZA_dec_fa3ZA_VAMCFM.printarray();
5875  cout << "\tMCFM tu" << endl;
5876  p_prod_tu_fa3ZA_dec_fa3ZA_VAMCFM.printarray();
5877  cout << "0minusAA" << endl;
5878  cout << "\tMCFM s" << endl;
5879  p_prod_0minusAA_dec_0minusAA_VAMCFM.printarray();
5880  cout << "\tMCFM tu" << endl;
5881  p_prod_tu_0minusAA_dec_0minusAA_VAMCFM.printarray();
5882  cout << "fa3AA" << endl;
5883  cout << "\tMCFM s" << endl;
5884  p_prod_fa3AA_dec_fa3AA_VAMCFM.printarray();
5885  cout << "\tMCFM tu" << endl;
5886  p_prod_tu_fa3AA_dec_fa3AA_VAMCFM.printarray();
5887  cout << "Bkg" << endl;
5888  cout << "\tMCFM s" << endl;
5889  p_bkg_VAMCFM.printarray();
5890  cout << "\tMCFM tu" << endl;
5891  p_bkg_tu_VAMCFM.printarray();
5892 
5893  mela.resetInputEvent();
5894 
5895  // Reset the CKM elements so that they don't transfer to the next function call
5896  TUtil::SetCKMElements(&bkpvckm_ud, &bkpvckm_us, &bkpvckm_cd, &bkpvckm_cs, &bkpvckm_ts, &bkpvckm_tb, &bkpvckm_ub, &bkpvckm_cb, &bkpvckm_td);
5897 
5898  // Reset the buffer
5899  cout.rdbuf(coutbuf);
5900  tout.close();
5901  mela.setVerbosity(bkpverbosity);
5902  }
5903 }
5904 
5905 
5906 void testME_ProdDec_MCFM_Ping(int flavor=2, shared_ptr<Mela> melaptr=nullptr){
5907  ofstream tout(TString("testME_ProdDec_MCFM_Ping_")+long(flavor)+".out");
5908  streambuf* coutbuf = cout.rdbuf();
5909  cout.rdbuf(tout.rdbuf());
5910 
5911  int erg_tev=13;
5912  float mPOLE=125.;
5913  float wPOLE=4.07e-3;
5914 
5915  TVar::VerbosityLevel verbosity = TVar::DEBUG;
5916  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
5917  Mela& mela = *melaptr;
5918  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
5919  mela.setVerbosity(verbosity);
5920  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
5921  //mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 79.9549392, 91.1876, 0.23119);
5922  if (verbosity>=TVar::DEBUG) cout << "Mela candidate decay mode initializing" << endl;
5923  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
5924  if (verbosity>=TVar::DEBUG) cout << "Mela candidate decay mode initialized" << endl;
5925 
5926  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
5927  const int nEntries = 6;
5928  double a1_array[nEntries][4] ={
5929  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 },
5930  { 238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188 },
5931  { 101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749 },
5932  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
5933  { 101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268 },
5934  { 24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428 }
5935  };
5936  double a2_array[nEntries][4] ={
5937  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
5938  { 317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883 },
5939  { 180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915 },
5940  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
5941  { 95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792 },
5942  { 49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688 }
5943  };
5944  double l1_array[nEntries][4] ={
5945  { 51.374202, 25.924766, 12.290178, 42.616376 },
5946  { 51.374202, 25.924766, 12.290178, 42.616376 },
5947  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
5948  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
5949  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
5950  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
5951  };
5952  double l2_array[nEntries][4] ={
5953  { 271.875752, 70.427173, -11.138146, 261.769598 },
5954  { 21.481452, 9.489680, -9.336587, 16.858699 },
5955  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
5956  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
5957  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
5958  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
5959  };
5960  double l3_array[nEntries][4] ={
5961  { 75.823478, -16.640412, 23.246999, 70.227220 },
5962  { 75.823478, -16.640412, 23.246999, 70.227220 },
5963  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
5964  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
5965  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
5966  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
5967  };
5968  double l4_array[nEntries][4] ={
5969  { 21.481452, 9.489680, -9.336587, 16.858699 },
5970  { 271.875752, 70.427173, -11.138146, 261.769598 },
5971  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
5972  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
5973  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
5974  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
5975  };
5976 
5977  if (flavor == 2){
5978  GenLep1Id=13;
5979  GenLep2Id=-13;
5980  GenLep3Id=11;
5981  GenLep4Id=-11;
5982  }
5983  else if (flavor == 1){
5984  GenLep1Id=11;
5985  GenLep2Id=-11;
5986  GenLep3Id=11;
5987  GenLep4Id=-11;
5988  }
5989  else if (flavor == 0){
5990  GenLep1Id=13;
5991  GenLep2Id=-13;
5992  GenLep3Id=13;
5993  GenLep4Id=-13;
5994  }
5995  else if (flavor == 3){
5996  GenLep1Id=14;
5997  GenLep2Id=-14;
5998  GenLep3Id=13;
5999  GenLep4Id=-13;
6000  }
6001  else if (flavor == 4){
6002  GenLep1Id=0;
6003  GenLep2Id=-0;
6004  GenLep3Id=1;
6005  GenLep4Id=-1;
6006  }
6007  else if (flavor == 5){
6008  GenLep1Id=1;
6009  GenLep2Id=-1;
6010  GenLep3Id=2;
6011  GenLep4Id=-2;
6012  }
6013  else if (flavor == 6){
6014  GenLep1Id=13;
6015  GenLep2Id=-13;
6016  GenLep3Id=2;
6017  GenLep4Id=-2;
6018  }
6019 
6020  for (int ev = 0; ev < 1; ev++){
6021  SimpleParticleCollection_t aparticles;
6022  TLorentzVector pAPart[4];
6023  pAPart[0].SetXYZT(a1_array[ev][1], a1_array[ev][2], a1_array[ev][3], a1_array[ev][0]);
6024  pAPart[1].SetXYZT(a2_array[ev][1], a2_array[ev][2], a2_array[ev][3], a2_array[ev][0]);
6025  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t(1-2*iap, pAPart[iap]));
6026  for (unsigned int iap=1; iap<2; iap++) aparticles.push_back(SimpleParticle_t(-2*iap, pAPart[iap]));
6027  for (unsigned int iap=0; iap<2; iap++) aparticles.push_back(SimpleParticle_t((1-2*iap)*13, pAPart[iap]));
6028 
6029  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
6030  int idOrdered_WW[4] ={ 11, -12, -11, 12 };
6031  TLorentzVector pOrdered[4];
6032  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
6033  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
6034  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
6035  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
6036  SimpleParticleCollection_t daughters_WW;
6037  for (unsigned int idau=0; idau<4; idau++) daughters_WW.push_back(SimpleParticle_t(idOrdered_WW[idau], pOrdered[idau]));
6038  SimpleParticleCollection_t daughters_WWasZZ;
6039  for (unsigned int iv=0; iv<2; iv++){ for (int ivd=0; ivd<2; ivd++) daughters_WWasZZ.push_back(SimpleParticle_t(idOrdered_WW[iv+2*ivd], pOrdered[iv+2*ivd])); }
6040  SimpleParticleCollection_t daughters_ZZ;
6041  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
6042 
6043  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
6044  mela.setInputEvent(&daughters_WW, &aparticles, (SimpleParticleCollection_t*)0, false);
6045  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
6046  mela.setInputEvent(&daughters_WWasZZ, &aparticles, (SimpleParticleCollection_t*)0, false);
6047  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
6048  mela.setInputEvent(&daughters_ZZ, &aparticles, (SimpleParticleCollection_t*)0, false);
6049 
6050  const unsigned int nprods=12;
6051  TVar::Production theProds[12]={
6056  };
6057  int cindex;
6058  for (unsigned int iprod=0; iprod<nprods; iprod++){
6059  /***** WW *****/
6060  cindex=0;
6061  mela.setCurrentCandidateFromIndex(cindex);
6062 
6063  TString theProdName=TVar::ProductionName(theProds[iprod]);
6064 
6065  float pVAMCFM_wbfVV_total;
6066  mela.setProcess(TVar::bkgWWZZ_SMHiggs, TVar::MCFM, theProds[iprod]);
6067  mela.computeProdDecP(pVAMCFM_wbfVV_total, true);
6068  cout << "pVAMCFM_wbfVV_" << theProdName << "_total: " << pVAMCFM_wbfVV_total << '\n' << endl;
6069  float pVAMCFM_wbfVV_bkg;
6070  mela.setProcess(TVar::bkgWWZZ, TVar::MCFM, theProds[iprod]);
6071  mela.computeProdDecP(pVAMCFM_wbfVV_bkg, true);
6072  cout << "pVAMCFM_wbfVV_" << theProdName << "_bkg: " << pVAMCFM_wbfVV_bkg << '\n' << endl;
6073  float pVAMCFM_wbfVV_sig;
6074  mela.setProcess(TVar::HSMHiggs_WWZZ, TVar::MCFM, theProds[iprod]);
6075  mela.computeProdDecP(pVAMCFM_wbfVV_sig, true);
6076  cout << "pVAMCFM_wbfVV_" << theProdName << "_sig: " << pVAMCFM_wbfVV_sig << '\n' << endl;
6077 
6078  float pVAMCFM_wbfWW_total;
6079  mela.setProcess(TVar::bkgWW_SMHiggs, TVar::MCFM, theProds[iprod]);
6080  mela.computeProdDecP(pVAMCFM_wbfWW_total, true);
6081  cout << "pVAMCFM_wbfWW_" << theProdName << "_total: " << pVAMCFM_wbfWW_total << '\n' << endl;
6082  float pVAMCFM_wbfWW_bkg;
6083  mela.setProcess(TVar::bkgWW, TVar::MCFM, theProds[iprod]);
6084  mela.computeProdDecP(pVAMCFM_wbfWW_bkg, true);
6085  cout << "pVAMCFM_wbfWW_" << theProdName << "_bkg: " << pVAMCFM_wbfWW_bkg << '\n' << endl;
6086  float pVAMCFM_wbfWW_sig;
6087  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, theProds[iprod]);
6088  mela.computeProdDecP(pVAMCFM_wbfWW_sig, true);
6089  cout << "pVAMCFM_wbfWW_" << theProdName << "_sig: " << pVAMCFM_wbfWW_sig << '\n' << endl;
6090 
6091  /***** WW (as ZZ) *****/
6092  cindex=1;
6093  mela.setCurrentCandidateFromIndex(cindex);
6094  float pVAMCFM_wbfWWasZZ_total;
6095  mela.setProcess(TVar::bkgZZ_SMHiggs, TVar::MCFM, theProds[iprod]);
6096  mela.computeProdDecP(pVAMCFM_wbfWWasZZ_total, true);
6097  cout << "pVAMCFM_wbfWWasZZ_" << theProdName << "_total: " << pVAMCFM_wbfWWasZZ_total << '\n' << endl;
6098  float pVAMCFM_wbfWWasZZ_bkg;
6099  mela.setProcess(TVar::bkgZZ, TVar::MCFM, theProds[iprod]);
6100  mela.computeProdDecP(pVAMCFM_wbfWWasZZ_bkg, true);
6101  cout << "pVAMCFM_wbfWWasZZ_" << theProdName << "_bkg: " << pVAMCFM_wbfWWasZZ_bkg << '\n' << endl;
6102  float pVAMCFM_wbfWWasZZ_sig;
6103  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, theProds[iprod]);
6104  mela.computeProdDecP(pVAMCFM_wbfWWasZZ_sig, true);
6105  cout << "pVAMCFM_wbfWWasZZ_" << theProdName << "_sig: " << pVAMCFM_wbfWWasZZ_sig << '\n' << endl;
6106 
6107  /***** ZZ *****/
6108  cindex=2;
6109  mela.setCurrentCandidateFromIndex(cindex);
6110  float pVAMCFM_wbfZZ_total;
6111  mela.setProcess(TVar::bkgZZ_SMHiggs, TVar::MCFM, theProds[iprod]);
6112  mela.computeProdDecP(pVAMCFM_wbfZZ_total, true);
6113  cout << "pVAMCFM_wbfZZ_" << theProdName << "_total: " << pVAMCFM_wbfZZ_total << '\n' << endl;
6114 
6115  float pVAMCFM_wbfZZ_bkg;
6116  mela.setProcess(TVar::bkgZZ, TVar::MCFM, theProds[iprod]);
6117  mela.computeProdDecP(pVAMCFM_wbfZZ_bkg, true);
6118  cout << "pVAMCFM_wbfZZ_" << theProdName << "_bkg: " << pVAMCFM_wbfZZ_bkg << '\n' << endl;
6119 
6120  float pVAMCFM_wbfZZ_sig;
6121  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, theProds[iprod]);
6122  mela.computeProdDecP(pVAMCFM_wbfZZ_sig, true);
6123  cout << "pVAMCFM_wbfZZ_" << theProdName << "_sig: " << pVAMCFM_wbfZZ_sig << '\n' << endl;
6124  }
6125  if (verbosity>=TVar::DEBUG){
6126  cout << "Removing Mela candidates\nSummary:" << endl;
6127  for (int ic=0; ic<mela.getNCandidates(); ic++){
6128  cout << "Candidate " << ic << endl;
6129  mela.setCurrentCandidateFromIndex(ic);
6130  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
6131  }
6132  cout << endl;
6133  }
6134  mela.resetInputEvent();
6135  cout << "Removed..." << endl;
6136  }
6137 
6138  cout.rdbuf(coutbuf);
6139  tout.close();
6140 
6141  mela.setVerbosity(bkpverbosity);
6142 }
6143 
6144 
6145 void testME_ProdDec_MCFM_JHUGen_Comparison(int flavor=2, bool useBkgSample=false, int motherflavor=0, int isZZWW=0 /*1==ZZ, 2==WW*/, int vbfvhchannel=1 /*1==VBF, 2==VH*/, shared_ptr<Mela> melaptr=nullptr){
6146  int erg_tev=8;
6147  float mPOLE=125.6;
6148  float wPOLE=4.15e-3;
6149  TString TREE_NAME = "SelectedTree";
6150 
6151  TVar::VerbosityLevel verbosity = TVar::ERROR;
6152 
6153  int idMother[2]={ 0 };
6154  // VBF ZZ(+)WW
6155  if (motherflavor==1){ idMother[0]=2; idMother[1]=1; }
6156  else if (motherflavor==2){ idMother[0]=-2; idMother[1]=-1; }
6157  // VBF ZZ-only(+)WH
6158  else if (motherflavor==3){ idMother[0]=2; idMother[1]=-1; }
6159  else if (motherflavor==4){ idMother[0]=-2; idMother[1]=1; }
6160  // VBF ZZ(+)ZH or WW(+)ZH
6161  else if (motherflavor==5){ idMother[0]=2; idMother[1]=-2; }
6162  else if (motherflavor==6){ idMother[0]=-2; idMother[1]=2; }
6163  else if (motherflavor==7){ idMother[0]=1; idMother[1]=-1; }
6164  else if (motherflavor==8){ idMother[0]=-1; idMother[1]=1; }
6165 
6166  TString cinput_main = "/scratch0/hep/ianderso/CJLST/140519/PRODFSR_8TeV";
6167  TString coutput;
6168  if (useBkgSample){
6169  if (vbfvhchannel==1) coutput = Form("HZZ4lTree_ZZTo%s_vbfMELA_MCFMJHUGenComparison", (flavor>=2 ? "2e2mu" : "4e"));
6170  else coutput = Form("HZZ4lTree_ZZTo%s_vhMELA_MCFMJHUGenComparison", (flavor>=2 ? "2e2mu" : "4e"));
6171  }
6172  else{
6173  if (vbfvhchannel==1){
6174  coutput = "HZZ4lTree_VBF0P_H125.6_vbfMELA_MCFMJHUGenComparison";
6175  }
6176  else{
6177  coutput = "HZZ4lTree_WH125_vhMELA_MCFMJHUGenComparison";
6178  mPOLE=125.; wPOLE=4.07e-3;
6179  }
6180  }
6181  if (isZZWW==1) coutput.Append("_ZZCouplOnly");
6182  else if (isZZWW==2) coutput.Append("_WWCouplOnly");
6183  if (idMother[0]!=0 || idMother[1]!=0) coutput.Append(Form("_MotherId_%i_%i", idMother[0], idMother[1]));
6184  coutput.Append(".root");
6185 
6186  if (!melaptr) {
6187  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
6188  }
6189  Mela& mela = *melaptr;
6190  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
6191  mela.setVerbosity(verbosity);
6192 
6193  TFile* finput;
6194  TFile* foutput;
6195  if (useBkgSample){
6196  finput = new TFile(Form("%s/%s/HZZ4lTree_ZZTo%s.root", cinput_main.Data(), (flavor>=2 ? "2mu2e" : "4e"), (flavor==2 ? "2e2mu" : "4e")), "read");
6197  }
6198  else{
6199  if (vbfvhchannel==1){
6200  finput = new TFile(Form("%s/%s/HZZ4lTree_VBF0P_H125.6.root", cinput_main.Data(), (flavor==2 ? "2mu2e" : "4e")), "read");
6201  }
6202  else{
6203  finput = new TFile(Form("%s/%s/HZZ4lTree_WH125.root", cinput_main.Data(), (flavor==2 ? "2mu2e" : "4e")), "read");
6204  }
6205  }
6206  foutput = new TFile(coutput, "recreate");
6207 
6208 
6209  float p_prod_0plus_dec_0plus_VAJHU;
6210  float p_prod_0plus_dec_0hplus_VAJHU;
6211  float p_prod_0plus_dec_0minus_VAJHU;
6212  float p_prod_0plus_dec_0_g1prime2_VAJHU;
6213  float p_prod_0hplus_dec_0hplus_VAJHU;
6214  float p_prod_0minus_dec_0minus_VAJHU;
6215  float p_prod_0_g1prime2_dec_0_g1prime2_VAJHU;
6216  float p_prod_0hplus_dec_0plus_VAJHU;
6217  float p_prod_0minus_dec_0plus_VAJHU;
6218  float p_prod_0_g1prime2_dec_0plus_VAJHU;
6219 
6220  float p_prod_0plus_dec_0plus_VAMCFM;
6221  float p_prod_0plus_dec_0hplus_VAMCFM;
6222  float p_prod_0plus_dec_0minus_VAMCFM;
6223  float p_prod_0plus_dec_0_g1prime2_VAMCFM;
6224  float p_prod_0hplus_dec_0hplus_VAMCFM;
6225  float p_prod_0minus_dec_0minus_VAMCFM;
6226  float p_prod_0_g1prime2_dec_0_g1prime2_VAMCFM;
6227  float p_prod_0hplus_dec_0plus_VAMCFM;
6228  float p_prod_0minus_dec_0plus_VAMCFM;
6229  float p_prod_0_g1prime2_dec_0plus_VAMCFM;
6230 
6231 
6232  short NJets30;
6233  std::vector<double>* JetPt=0;
6234  std::vector<double>* JetEta=0;
6235  std::vector<double>* JetPhi=0;
6236  std::vector<double>* JetMass=0;
6237  std::vector<double> myJetPt;
6238  std::vector<double> myJetEta;
6239  std::vector<double> myJetPhi;
6240  std::vector<double> myJetMass;
6241  TBranch* bJetPt=0;
6242  TBranch* bJetEta=0;
6243  TBranch* bJetPhi=0;
6244  TBranch* bJetMass=0;
6245 
6246  float mjj = 0;
6247  float mjjzz = 0;
6248  float sysZ = 0.;
6249  float mzz = 126.;
6250  float m1 = 91.471450;
6251  float m2 = 12.139782;
6252  float h1 = 0.2682896;
6253  float h2 = 0.1679779;
6254  float phi = 1.5969792;
6255  float hs = -0.727181;
6256  float phi1 = 1.8828257;
6257  float ZZPt, ZZPhi, ZZEta;
6258 
6259  float costhetastar=0;
6260  float costheta1=0;
6261  float costheta2=0;
6262  float Phi=0;
6263  float Phi1=0;
6264  float Q2V1=0;
6265  float Q2V2=0;
6266  float mVstar=0, mV=0;
6267 
6268  TTree* tree = (TTree*)finput->Get(TREE_NAME);
6269  tree->SetBranchAddress("NJets30", &NJets30);
6270  tree->SetBranchAddress("JetPt", &JetPt, &bJetPt);
6271  tree->SetBranchAddress("JetEta", &JetEta, &bJetEta);
6272  tree->SetBranchAddress("JetPhi", &JetPhi, &bJetPhi);
6273  tree->SetBranchAddress("JetMass", &JetMass, &bJetMass);
6274  tree->SetBranchAddress("ZZMass", &mzz);
6275  tree->SetBranchAddress("ZZPt", &ZZPt);
6276  tree->SetBranchAddress("ZZEta", &ZZEta);
6277  tree->SetBranchAddress("ZZPhi", &ZZPhi);
6278  tree->SetBranchAddress("Z1Mass", &m1);
6279  tree->SetBranchAddress("Z2Mass", &m2);
6280  tree->SetBranchAddress("helcosthetaZ1", &h1);
6281  tree->SetBranchAddress("helcosthetaZ2", &h2);
6282  tree->SetBranchAddress("helphi", &phi);
6283  tree->SetBranchAddress("costhetastar", &hs);
6284  tree->SetBranchAddress("phistarZ1", &phi1);
6285 
6286  TTree* newtree = new TTree("TestTree", "");
6287 
6288  newtree->Branch("p_prod_0plus_dec_0plus_VAJHU", &p_prod_0plus_dec_0plus_VAJHU);
6289  newtree->Branch("p_prod_0plus_dec_0hplus_VAJHU", &p_prod_0plus_dec_0hplus_VAJHU);
6290  newtree->Branch("p_prod_0plus_dec_0minus_VAJHU", &p_prod_0plus_dec_0minus_VAJHU);
6291  newtree->Branch("p_prod_0plus_dec_0_g1prime2_VAJHU", &p_prod_0plus_dec_0_g1prime2_VAJHU);
6292  newtree->Branch("p_prod_0hplus_dec_0hplus_VAJHU", &p_prod_0hplus_dec_0hplus_VAJHU);
6293  newtree->Branch("p_prod_0minus_dec_0minus_VAJHU", &p_prod_0minus_dec_0minus_VAJHU);
6294  newtree->Branch("p_prod_0_g1prime2_dec_0_g1prime2_VAJHU", &p_prod_0_g1prime2_dec_0_g1prime2_VAJHU);
6295  newtree->Branch("p_prod_0hplus_dec_0plus_VAJHU", &p_prod_0hplus_dec_0plus_VAJHU);
6296  newtree->Branch("p_prod_0minus_dec_0plus_VAJHU", &p_prod_0minus_dec_0plus_VAJHU);
6297  newtree->Branch("p_prod_0_g1prime2_dec_0plus_VAJHU", &p_prod_0_g1prime2_dec_0plus_VAJHU);
6298 
6299  newtree->Branch("p_prod_0plus_dec_0plus_VAMCFM", &p_prod_0plus_dec_0plus_VAMCFM);
6300  newtree->Branch("p_prod_0plus_dec_0hplus_VAMCFM", &p_prod_0plus_dec_0hplus_VAMCFM);
6301  newtree->Branch("p_prod_0plus_dec_0minus_VAMCFM", &p_prod_0plus_dec_0minus_VAMCFM);
6302  newtree->Branch("p_prod_0plus_dec_0_g1prime2_VAMCFM", &p_prod_0plus_dec_0_g1prime2_VAMCFM);
6303  newtree->Branch("p_prod_0hplus_dec_0hplus_VAMCFM", &p_prod_0hplus_dec_0hplus_VAMCFM);
6304  newtree->Branch("p_prod_0minus_dec_0minus_VAMCFM", &p_prod_0minus_dec_0minus_VAMCFM);
6305  newtree->Branch("p_prod_0_g1prime2_dec_0_g1prime2_VAMCFM", &p_prod_0_g1prime2_dec_0_g1prime2_VAMCFM);
6306  newtree->Branch("p_prod_0hplus_dec_0plus_VAMCFM", &p_prod_0hplus_dec_0plus_VAMCFM);
6307  newtree->Branch("p_prod_0minus_dec_0plus_VAMCFM", &p_prod_0minus_dec_0plus_VAMCFM);
6308  newtree->Branch("p_prod_0_g1prime2_dec_0plus_VAMCFM", &p_prod_0_g1prime2_dec_0plus_VAMCFM);
6309 
6310  newtree->Branch("ZZMass", &mzz);
6311  newtree->Branch("DiJetMass", &mjj);
6312  newtree->Branch("DiJetVVMass", &mjjzz);
6313  newtree->Branch("DiJetVVPz", &sysZ);
6314  newtree->Branch("costhetastar", &costhetastar);
6315  newtree->Branch("costheta1", &costheta1);
6316  newtree->Branch("costheta2", &costheta2);
6317  newtree->Branch("Phi", &Phi);
6318  newtree->Branch("Phi1", &Phi1);
6319  newtree->Branch("Q2V1", &Q2V1);
6320  newtree->Branch("Q2V2", &Q2V2);
6321 
6322 
6323  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
6324  if (flavor == 2){
6325  GenLep1Id=13;
6326  GenLep2Id=-13;
6327  GenLep3Id=11;
6328  GenLep4Id=-11;
6329  }
6330  else if (flavor == 1){
6331  GenLep1Id=11;
6332  GenLep2Id=-11;
6333  GenLep3Id=11;
6334  GenLep4Id=-11;
6335  }
6336  else if (flavor == 0){
6337  GenLep1Id=13;
6338  GenLep2Id=-13;
6339  GenLep3Id=13;
6340  GenLep4Id=-13;
6341  }
6342  else if (flavor == 3){
6343  GenLep1Id=14;
6344  GenLep2Id=-14;
6345  GenLep3Id=13;
6346  GenLep4Id=-13;
6347  }
6348  else if (flavor == 4){
6349  GenLep1Id=0;
6350  GenLep2Id=-0;
6351  GenLep3Id=1;
6352  GenLep4Id=-1;
6353  }
6354  else if (flavor == 5){
6355  GenLep1Id=1;
6356  GenLep2Id=-1;
6357  GenLep3Id=2;
6358  GenLep4Id=-2;
6359  }
6360  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
6361  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
6362 
6363  int nEntries = tree->GetEntries();
6364  int recorded=0;
6365  for (int ev = 0; ev < nEntries; ev++){
6366  if (recorded>=(verbosity>=TVar::DEBUG ? 4 : (!useBkgSample ? 1000 : nEntries))) break;
6367  //if (recorded>=1) break;
6368  tree->GetEntry(ev);
6369  if (recorded%1000==0) cout << "Nrecorded = " << recorded << "..." << endl;
6370 
6371  if (JetPt->size()>=2 && NJets30>=2){
6372  TLorentzVector jet1(0, 0, 1e-3, 1e-3), jet2(0, 0, 1e-3, 1e-3), higgs(0, 0, 0, 0);
6373  jet1.SetPtEtaPhiM(JetPt->at(0), JetEta->at(0), JetPhi->at(0), JetMass->at(0));
6374  jet2.SetPtEtaPhiM(JetPt->at(1), JetEta->at(1), JetPhi->at(1), JetMass->at(1));
6375  higgs.SetPtEtaPhiM(ZZPt, ZZEta, ZZPhi, mzz);
6376  TVector3 boostH = higgs.BoostVector();
6377 
6379  associated.push_back(SimpleParticle_t(0, jet1));
6380  associated.push_back(SimpleParticle_t(0, jet2));
6381  mjj = (jet1+jet2).M();
6382 
6383  TLorentzVector pDaughters[4];
6384  std::vector<TLorentzVector> daus = mela.calculate4Momentum(mzz, m1, m2, acos(hs), acos(h1), acos(h2), phi1, phi);
6385  for (int ip=0; ip<min(4, (int)daus.size()); ip++){ pDaughters[ip]=daus.at(ip); pDaughters[ip].Boost(boostH); }
6386  SimpleParticleCollection_t daughters_ZZ;
6387  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pDaughters[idau]));
6388 
6390  TLorentzVector pTotal(0, 0, 0, 0);
6391  for (unsigned int ip=0; ip<associated.size(); ip++) pTotal = pTotal + associated.at(ip).second;
6392  for (unsigned int ip=0; ip<daughters_ZZ.size(); ip++) pTotal = pTotal + daughters_ZZ.at(ip).second;
6393  mjjzz = pTotal.M();
6394  sysZ = pTotal.Z();
6395  TVector3 boostT(-pTotal.X()/pTotal.T(), -pTotal.Y()/pTotal.T(), 0);
6396  pTotal.Boost(boostT);
6397  TLorentzVector pMother[2];
6398  pMother[0].SetXYZT(0, 0, (pTotal.T()+pTotal.Z())/2., (pTotal.T()+pTotal.Z())/2.);
6399  pMother[1].SetXYZT(0, 0, (-pTotal.T()+pTotal.Z())/2., (pTotal.T()-pTotal.Z())/2.);
6400  for (unsigned int imot=0; imot<2; imot++){
6401  pMother[imot].Boost(-boostT);
6402  mothers.push_back(SimpleParticle_t(idMother[imot], pMother[imot]));
6403  }
6404  mela.setInputEvent(&daughters_ZZ, &associated, &mothers, true);
6405 
6406  if (mothers.size()>1){
6407  if (vbfvhchannel==1) TUtil::computeVBFAngles(
6408  costhetastar,
6409  costheta1,
6410  costheta2,
6411  Phi,
6412  Phi1,
6413  Q2V1,
6414  Q2V2,
6415 
6416  daughters_ZZ.at(0).second, daughters_ZZ.at(0).first,
6417  daughters_ZZ.at(1).second, daughters_ZZ.at(1).first,
6418  daughters_ZZ.at(2).second, daughters_ZZ.at(2).first,
6419  daughters_ZZ.at(3).second, daughters_ZZ.at(3).first,
6420 
6421  associated.at(0).second, associated.at(0).first,
6422  associated.at(1).second, associated.at(1).first,
6423 
6424  &(mothers.at(0).second), mothers.at(0).first,
6425  &(mothers.at(1).second), mothers.at(1).first
6426  );
6428  costhetastar,
6429  costheta1,
6430  costheta2,
6431  Phi,
6432  Phi1,
6433  mVstar,
6434  mV,
6435 
6436  daughters_ZZ.at(0).second, daughters_ZZ.at(0).first,
6437  daughters_ZZ.at(1).second, daughters_ZZ.at(1).first,
6438  daughters_ZZ.at(2).second, daughters_ZZ.at(2).first,
6439  daughters_ZZ.at(3).second, daughters_ZZ.at(3).first,
6440 
6441  associated.at(0).second, associated.at(0).first,
6442  associated.at(1).second, associated.at(1).first,
6443 
6444  &(mothers.at(0).second), mothers.at(0).first,
6445  &(mothers.at(1).second), mothers.at(1).first
6446  );
6447  }
6448  else{
6449  if (vbfvhchannel==1) TUtil::computeVBFAngles(
6450  costhetastar,
6451  costheta1,
6452  costheta2,
6453  Phi,
6454  Phi1,
6455  Q2V1,
6456  Q2V2,
6457 
6458  daughters_ZZ.at(0).second, daughters_ZZ.at(0).first,
6459  daughters_ZZ.at(1).second, daughters_ZZ.at(1).first,
6460  daughters_ZZ.at(2).second, daughters_ZZ.at(2).first,
6461  daughters_ZZ.at(3).second, daughters_ZZ.at(3).first,
6462 
6463  associated.at(0).second, associated.at(0).first,
6464  associated.at(1).second, associated.at(1).first
6465  );
6467  costhetastar,
6468  costheta1,
6469  costheta2,
6470  Phi,
6471  Phi1,
6472  mVstar,
6473  mV,
6474 
6475  daughters_ZZ.at(0).second, daughters_ZZ.at(0).first,
6476  daughters_ZZ.at(1).second, daughters_ZZ.at(1).first,
6477  daughters_ZZ.at(2).second, daughters_ZZ.at(2).first,
6478  daughters_ZZ.at(3).second, daughters_ZZ.at(3).first,
6479 
6480  associated.at(0).second, associated.at(0).first,
6481  associated.at(1).second, associated.at(1).first
6482  );
6483  }
6484 
6485 
6486  /***** JHUGen *****/
6487 
6489  float p_dec_0plus_VAJHU;
6490  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
6491  mela.computeP(p_dec_0plus_VAJHU, false);
6492  float p_dec_0hplus_VAJHU=p_dec_0plus_VAJHU;
6493  if (verbosity<=TVar::ERROR && isZZWW!=2){
6494  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
6495  mela.computeP(p_dec_0hplus_VAJHU, false);
6496  }
6497  float p_dec_0minus_VAJHU=p_dec_0plus_VAJHU;
6498  if (verbosity<=TVar::ERROR && isZZWW!=2){
6499  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
6500  mela.computeP(p_dec_0minus_VAJHU, false);
6501  }
6502  float p_dec_0_g1prime2_VAJHU=p_dec_0plus_VAJHU;
6503  if (verbosity<=TVar::ERROR && isZZWW!=2){
6504  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-10000;
6505  mela.computeP(p_dec_0_g1prime2_VAJHU, false);
6506  }
6507 
6508  float p_prod_0plus_VAJHU=0;
6509  float p_prod_0hplus_VAJHU=0;
6510  float p_prod_0minus_VAJHU=0;
6511  float p_prod_0_g1prime2_VAJHU=0;
6512 
6513  if (vbfvhchannel==1){
6515  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6516  else{ mela.selfDHwwcoupl[0][0][0]=1; mela.differentiate_HWW_HZZ=true; }
6517  mela.computeProdP(p_prod_0plus_VAJHU, false);
6518  if (verbosity<=TVar::ERROR){
6519  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6520  else{ mela.selfDHwwcoupl[0][1][0]=1; mela.differentiate_HWW_HZZ=true; }
6521  mela.computeProdP(p_prod_0hplus_VAJHU, false);
6522 
6523  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6524  else{ mela.selfDHwwcoupl[0][3][0]=1; mela.differentiate_HWW_HZZ=true; }
6525  mela.computeProdP(p_prod_0minus_VAJHU, false);
6526 
6527  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-10000; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6528  else{ mela.selfDHwwcoupl[0][11][0]=-10000; mela.differentiate_HWW_HZZ=true; }
6529  mela.computeProdP(p_prod_0_g1prime2_VAJHU, false);
6530  }
6531  }
6532  else{
6533  float p_wh_0plus_VAJHU=0;
6534  float p_wh_0hplus_VAJHU=0;
6535  float p_wh_0minus_VAJHU=0;
6536  float p_wh_0_g1prime2_VAJHU=0;
6537 
6538  if (isZZWW!=1){
6540  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
6541  mela.computeProdP(p_wh_0plus_VAJHU, false);
6542  if (verbosity<=TVar::ERROR){
6543  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
6544  mela.computeProdP(p_wh_0hplus_VAJHU, false);
6545 
6546  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
6547  mela.computeProdP(p_wh_0minus_VAJHU, false);
6548 
6549  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-10000;
6550  mela.computeProdP(p_wh_0_g1prime2_VAJHU, false);
6551  }
6552  }
6553 
6554  float p_zh_0plus_VAJHU=0;
6555  float p_zh_0hplus_VAJHU=0;
6556  float p_zh_0minus_VAJHU=0;
6557  float p_zh_0_g1prime2_VAJHU=0;
6558 
6559  if (isZZWW!=2){
6561  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
6562  mela.computeProdP(p_zh_0plus_VAJHU, false);
6563  if (verbosity<=TVar::ERROR){
6564  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1;
6565  mela.computeProdP(p_zh_0hplus_VAJHU, false);
6566 
6567  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
6568  mela.computeProdP(p_zh_0minus_VAJHU, false);
6569 
6570  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-10000;
6571  mela.computeProdP(p_zh_0_g1prime2_VAJHU, false);
6572  }
6573  }
6574 
6575  p_prod_0plus_VAJHU = p_wh_0plus_VAJHU + p_zh_0plus_VAJHU;
6576  p_prod_0hplus_VAJHU = p_wh_0hplus_VAJHU + p_zh_0hplus_VAJHU;
6577  p_prod_0minus_VAJHU = p_wh_0minus_VAJHU + p_zh_0minus_VAJHU;
6578  p_prod_0_g1prime2_VAJHU = p_wh_0_g1prime2_VAJHU + p_zh_0_g1prime2_VAJHU;
6579  }
6580 
6581  p_prod_0plus_dec_0plus_VAJHU=p_prod_0plus_VAJHU*p_dec_0plus_VAJHU;
6582  p_prod_0plus_dec_0hplus_VAJHU=p_prod_0plus_VAJHU*p_dec_0hplus_VAJHU;
6583  p_prod_0plus_dec_0minus_VAJHU=p_prod_0plus_VAJHU*p_dec_0minus_VAJHU;
6584  p_prod_0plus_dec_0_g1prime2_VAJHU=p_prod_0plus_VAJHU*p_dec_0_g1prime2_VAJHU;
6585  p_prod_0hplus_dec_0hplus_VAJHU=p_prod_0hplus_VAJHU*p_dec_0hplus_VAJHU;
6586  p_prod_0minus_dec_0minus_VAJHU=p_prod_0minus_VAJHU*p_dec_0minus_VAJHU;
6587  p_prod_0_g1prime2_dec_0_g1prime2_VAJHU=p_prod_0_g1prime2_VAJHU*p_dec_0_g1prime2_VAJHU;
6588  p_prod_0hplus_dec_0plus_VAJHU=p_prod_0hplus_VAJHU*p_dec_0plus_VAJHU;
6589  p_prod_0minus_dec_0plus_VAJHU=p_prod_0minus_VAJHU*p_dec_0plus_VAJHU;
6590  p_prod_0_g1prime2_dec_0plus_VAJHU=p_prod_0_g1prime2_VAJHU*p_dec_0plus_VAJHU;
6591 
6592  double propagator = 1./(pow(pow(mzz, 2)-pow(mPOLE, 2), 2)+pow(mPOLE*wPOLE, 2));
6593  if (vbfvhchannel!=1){ // JHUGen VH pseudo-propagator
6594  double mh, gah;
6595  mela.getIORecord()->getHiggsMassWidth(mh, gah, 0);
6596  propagator /= 1./(pow(pow(mzz, 2)-pow(mh, 2), 2) + pow(mh*gah, 2));
6597  }
6598 
6599  /***** MCFM *****/
6600 
6601  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::JJVBF);
6602 
6603  spinzerohiggs_anomcoupl_.channeltoggle_stu=0;
6604  spinzerohiggs_anomcoupl_.vvhvvtoggle_vbfvh=(vbfvhchannel==1 ? 0 : 1);
6605 
6606  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
6607  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
6608  if (isZZWW==2) spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
6609  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6610  else{ mela.selfDHwwcoupl[0][0][0]=1; mela.differentiate_HWW_HZZ=true; }
6611  mela.computeProdDecP(p_prod_0plus_dec_0plus_VAMCFM, false);
6612  /*
6613  if (verbosity<=TVar::ERROR){
6614  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6615  else{ mela.selfDHwwcoupl[0][1][0]=1; mela.differentiate_HWW_HZZ=true; }
6616  mela.computeProdDecP(p_prod_0hplus_dec_0hplus_VAMCFM, false);
6617  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6618  else{ mela.selfDHwwcoupl[0][3][0]=1; mela.differentiate_HWW_HZZ=true; }
6619  mela.computeProdDecP(p_prod_0minus_dec_0minus_VAMCFM, false);
6620  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-10000;
6621  mela.computeProdDecP(p_prod_0_g1prime2_dec_0_g1prime2_VAMCFM, false);
6622 
6623  spinzerohiggs_anomcoupl_.AnomalCouplPR=0;
6624  spinzerohiggs_anomcoupl_.AnomalCouplDK=1;
6625  if (isZZWW==2) spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
6626  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6627  else{ mela.selfDHwwcoupl[0][1][0]=1; mela.differentiate_HWW_HZZ=true; }
6628  mela.computeProdDecP(p_prod_0plus_dec_0hplus_VAMCFM, false);
6629  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6630  else{ mela.selfDHwwcoupl[0][3][0]=1; mela.differentiate_HWW_HZZ=true; }
6631  mela.computeProdDecP(p_prod_0plus_dec_0minus_VAMCFM, false);
6632  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-10000; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6633  else{ mela.selfDHwwcoupl[0][11][0]=-10000; mela.differentiate_HWW_HZZ=true; }
6634  mela.computeProdDecP(p_prod_0plus_dec_0_g1prime2_VAMCFM, false);
6635 
6636  spinzerohiggs_anomcoupl_.AnomalCouplPR=1;
6637  spinzerohiggs_anomcoupl_.AnomalCouplDK=0;
6638  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6639  else{ mela.selfDHwwcoupl[0][1][0]=1; mela.differentiate_HWW_HZZ=true; }
6640  mela.computeProdDecP(p_prod_0hplus_dec_0plus_VAMCFM, false);
6641  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6642  else{ mela.selfDHwwcoupl[0][3][0]=1; mela.differentiate_HWW_HZZ=true; }
6643  mela.computeProdDecP(p_prod_0minus_dec_0plus_VAMCFM, false);
6644  if (isZZWW!=2){ mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-10000; if (isZZWW==1) mela.differentiate_HWW_HZZ=true; }
6645  else{ mela.selfDHwwcoupl[0][11][0]=-10000; mela.differentiate_HWW_HZZ=true; }
6646  mela.computeProdDecP(p_prod_0_g1prime2_dec_0plus_VAMCFM, false);
6647  }
6648  */
6649 
6650  if (verbosity>=TVar::DEBUG) TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
6651 
6652  mela.resetInputEvent();
6653 
6654  if (p_prod_0plus_dec_0plus_VAJHU>0.){
6655  p_prod_0plus_dec_0hplus_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6656  p_prod_0plus_dec_0minus_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6657  p_prod_0plus_dec_0_g1prime2_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6658  p_prod_0hplus_dec_0hplus_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6659  p_prod_0minus_dec_0minus_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6660  p_prod_0_g1prime2_dec_0_g1prime2_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6661  p_prod_0hplus_dec_0plus_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6662  p_prod_0minus_dec_0plus_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6663  p_prod_0_g1prime2_dec_0plus_VAJHU /= p_prod_0plus_dec_0plus_VAJHU;
6664  p_prod_0plus_dec_0plus_VAJHU *= propagator;
6665  }
6666  if (p_prod_0plus_dec_0plus_VAMCFM>0.){
6667  p_prod_0plus_dec_0hplus_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6668  p_prod_0plus_dec_0minus_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6669  p_prod_0plus_dec_0_g1prime2_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6670  p_prod_0hplus_dec_0hplus_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6671  p_prod_0minus_dec_0minus_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6672  p_prod_0_g1prime2_dec_0_g1prime2_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6673  p_prod_0hplus_dec_0plus_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6674  p_prod_0minus_dec_0plus_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6675  p_prod_0_g1prime2_dec_0plus_VAMCFM /= p_prod_0plus_dec_0plus_VAMCFM;
6676  }
6677 
6678  newtree->Fill();
6679  recorded++;
6680  }
6681  }
6682  foutput->WriteTObject(newtree);
6683  delete newtree;
6684  foutput->Close();
6685  finput->Close();
6686  mela.setVerbosity(bkpverbosity);
6687 }
6688 
6689 void testME_Dec_JHUGenMCFM_Ping(int flavor=2, shared_ptr<Mela> melaptr=nullptr){
6690  ofstream tout(TString("testME_Dec_JHUGenMCFM_Ping_")+long(flavor)+".out");
6691  streambuf* coutbuf = cout.rdbuf();
6692  cout.rdbuf(tout.rdbuf());
6693 
6694  int erg_tev=13;
6695  float mPOLE=125.;
6696  float wPOLE=4.07e-3;
6697 
6698  TVar::VerbosityLevel verbosity = TVar::ERROR;
6699  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
6700  Mela& mela = *melaptr;
6701  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
6702  mela.setVerbosity(verbosity);
6703  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
6704  mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 80.399, 91.1876, 0.23119);
6705 
6706  double aL1, aL2, aR1, aR2;
6707 
6708  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
6709  /*
6710  const int nEntries = 3;
6711  double l1_array[nEntries][4] = {
6712  {1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332},
6713  {238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188},
6714  {101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749}
6715  };
6716  double l2_array[nEntries][4] = {
6717  {22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371},
6718  {101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268},
6719  {24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428}
6720  };
6721  double l3_array[nEntries][4] = {
6722  {1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620},
6723  {317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883},
6724  {180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915}
6725  };
6726  double l4_array[nEntries][4] = {
6727  {471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354},
6728  {95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792},
6729  {49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688}
6730  };
6731  */
6732  const int nEntries = 6;
6733  double l1_array[nEntries][4] ={
6734  { 51.374202, 25.924766, 12.290178, 42.616376 },
6735  { 51.374202, 25.924766, 12.290178, 42.616376 },
6736  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
6737  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
6738  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
6739  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
6740  };
6741  double l2_array[nEntries][4] ={
6742  { 271.875752, 70.427173, -11.138146, 261.769598 },
6743  { 21.481452, 9.489680, -9.336587, 16.858699 },
6744  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
6745  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
6746  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
6747  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
6748  };
6749  double l3_array[nEntries][4] ={
6750  { 75.823478, -16.640412, 23.246999, 70.227220 },
6751  { 75.823478, -16.640412, 23.246999, 70.227220 },
6752  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
6753  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
6754  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
6755  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
6756  };
6757  double l4_array[nEntries][4] ={
6758  { 21.481452, 9.489680, -9.336587, 16.858699 },
6759  { 271.875752, 70.427173, -11.138146, 261.769598 },
6760  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
6761  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
6762  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
6763  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
6764  };
6765 
6766  for (int ev = 0; ev < 1; ev++){
6767  if (flavor == 2){
6768  GenLep1Id=13;
6769  GenLep2Id=-13;
6770  GenLep3Id=11;
6771  GenLep4Id=-11;
6772  }
6773  else if (flavor == 1){
6774  GenLep1Id=11;
6775  GenLep2Id=-11;
6776  GenLep3Id=11;
6777  GenLep4Id=-11;
6778  }
6779  else if (flavor == 0){
6780  GenLep1Id=13;
6781  GenLep2Id=-13;
6782  GenLep3Id=13;
6783  GenLep4Id=-13;
6784  }
6785  else if (flavor == 3){
6786  GenLep1Id=14;
6787  GenLep2Id=-14;
6788  GenLep3Id=13;
6789  GenLep4Id=-13;
6790  }
6791  else if (flavor == 4){
6792  GenLep1Id=0;
6793  GenLep2Id=-0;
6794  GenLep3Id=1;
6795  GenLep4Id=-1;
6796  }
6797  else if (flavor == 5){
6798  GenLep1Id=1;
6799  GenLep2Id=-1;
6800  GenLep3Id=2;
6801  GenLep4Id=-2;
6802  }
6803 
6804  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
6805  int idOrdered_WW[4] ={ 11, -12, -11, 12 };
6806  TLorentzVector pOrdered[4];
6807  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
6808  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
6809  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
6810  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
6811  SimpleParticleCollection_t daughters_WW;
6812  for (unsigned int idau=0; idau<4; idau++) daughters_WW.push_back(SimpleParticle_t(idOrdered_WW[idau], pOrdered[idau]));
6813  SimpleParticleCollection_t daughters_WWasZZ;
6814  for (unsigned int iv=0; iv<2; iv++){ for (int ivd=0; ivd<2; ivd++) daughters_WWasZZ.push_back(SimpleParticle_t(idOrdered_WW[iv+2*ivd], pOrdered[iv+2*ivd])); }
6815  SimpleParticleCollection_t daughters_ZZ;
6816  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
6817 
6818  TLorentzVector pOrdered_ZG[3];
6819  pOrdered_ZG[0]=pOrdered[0];
6820  pOrdered_ZG[1]=pOrdered[1];
6821  pOrdered_ZG[2]=pOrdered[2]+pOrdered[3];
6822  SimpleParticleCollection_t daughters_ZG;
6823  for (unsigned int idau=0; idau<2; idau++) daughters_ZG.push_back(SimpleParticle_t(idOrdered[idau], pOrdered_ZG[idau]));
6824  for (unsigned int idau=2; idau<3; idau++) daughters_ZG.push_back(SimpleParticle_t(22, pOrdered_ZG[idau]));
6825 
6826  TLorentzVector pOrdered_GG[3];
6827  pOrdered_GG[0]=pOrdered[0]+pOrdered[1];
6828  pOrdered_GG[1]=pOrdered[2]+pOrdered[3];
6829  SimpleParticleCollection_t daughters_GG;
6830  for (unsigned int idau=0; idau<2; idau++) daughters_GG.push_back(SimpleParticle_t(22, pOrdered_GG[idau]));
6831 
6832  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
6833  mela.setInputEvent(&daughters_WW, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
6834  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
6835  mela.setInputEvent(&daughters_ZZ, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
6836  mela.setInputEvent(&daughters_ZG, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
6837  mela.setCandidateDecayMode(TVar::CandidateDecay_GG);
6838  mela.setInputEvent(&daughters_GG, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
6839 
6840  int cindex;
6841 
6842  /***** WW *****/
6843  cindex=0;
6844  mela.setCurrentCandidateFromIndex(cindex);
6845 
6846  // JHUGen ME
6847  float pVAJHUGen_ggWW_SM_sig;
6849  mela.computeP(pVAJHUGen_ggWW_SM_sig, true);
6850  cout << "pVAJHUGen_ggWW_SM_sig: " << pVAJHUGen_ggWW_SM_sig << '\n' << endl;
6851 
6852  float pVAJHUGen_ggWW_0pm_sig;
6854  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
6855  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.;
6856  mela.computeP(pVAJHUGen_ggWW_0pm_sig, true);
6857  cout << "pVAJHUGen_ggWW_0pm_sig: " << pVAJHUGen_ggWW_0pm_sig << '\n' << endl;
6858  mela.getIORecord()->getVDaughterCouplings(aL1, aR1, 0);
6859  mela.getIORecord()->getVDaughterCouplings(aL2, aR2, 1);
6860 
6861  float pVAJHUGen_ggWW_0pm_CT_sig;
6862  //mela.setVerbosity(TVar::DEBUG_VERBOSE);
6864  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
6865  mela.selfDHzpzpcoupl[gHIGGS_VV_1][0]=1.;
6866  //mela.selfDHwpwpcoupl[gHIGGS_VV_1][0]=1.;
6867  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=aL1;
6868  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=aL1;
6869  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=aL1;
6870  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=aL1;
6871  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=aL1;
6872  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=aL1;
6873  mela.selfDWpffcoupl[gHIGGS_Vp_El_right][0]=aR1;
6874  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_right][0]=aR1;
6875  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_right][0]=aR1;
6876  mela.selfDWpffcoupl[gHIGGS_Vp_Up_right][0]=aR1;
6877  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_right][0]=aR1;
6878  mela.selfDWpffcoupl[gHIGGS_Vp_Top_right][0]=aR1;
6879  mela.selfDM_Wprime=80.399;
6880  mela.selfDGa_Wprime=2.085;
6881  mela.computeP(pVAJHUGen_ggWW_0pm_CT_sig, true);
6882  cout << "pVAJHUGen_ggWW_0pm_CT_sig: " << pVAJHUGen_ggWW_0pm_CT_sig << '\n' << endl;
6883  //mela.setVerbosity(verbosity);
6884 
6885  float pVAJHUGen_ggWW_PS_sig;
6886  mela.setProcess(TVar::H0minus, TVar::JHUGen, TVar::ZZGG);
6887  mela.computeP(pVAJHUGen_ggWW_PS_sig, true);
6888  cout << "pVAJHUGen_ggWW_PS_sig: " << pVAJHUGen_ggWW_PS_sig << '\n' << endl;
6889 
6890  float pVAJHUGen_ggWW_0m_sig;
6892  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
6893  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.;
6894  mela.computeP(pVAJHUGen_ggWW_0m_sig, true);
6895  cout << "pVAJHUGen_ggWW_0m_sig: " << pVAJHUGen_ggWW_0m_sig << '\n' << endl;
6896 
6897  // MCFM ME
6898  float pVAMCFM_ggWW_SM_total;
6900  mela.computeP(pVAMCFM_ggWW_SM_total, true);
6901  cout << "pVAMCFM_ggWW_SM_total: " << pVAMCFM_ggWW_SM_total << '\n' << endl;
6902 
6903  float pVAMCFM_ggWW_0pm_total;
6905  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.;
6906  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.;
6907  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.;
6908  mela.computeP(pVAMCFM_ggWW_0pm_total, true);
6909  cout << "pVAMCFM_ggWW_0pm_total: " << pVAMCFM_ggWW_0pm_total << '\n' << endl;
6910 
6911  float pVAMCFM_ggWW_SM_sig;
6912  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
6913  mela.computeP(pVAMCFM_ggWW_SM_sig, true);
6914  cout << "pVAMCFM_ggWW_SM_sig: " << pVAMCFM_ggWW_SM_sig << '\n' << endl;
6915 
6916  float pVAMCFM_ggWW_0pm_sig;
6917  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
6918  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.;
6919  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.;
6920  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.;
6921  mela.computeP(pVAMCFM_ggWW_0pm_sig, true);
6922  cout << "pVAMCFM_ggWW_0pm_sig: " << pVAMCFM_ggWW_0pm_sig << '\n' << endl;
6923 
6924  float pVAMCFM_ggWW_0m_sig;
6925  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
6926  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.;
6927  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.;
6928  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.;
6929  mela.computeP(pVAMCFM_ggWW_0m_sig, true);
6930  cout << "pVAMCFM_ggWW_0m_sig: " << pVAMCFM_ggWW_0m_sig << '\n' << endl;
6931 
6932  // MCFM HM ME
6933  float pVAMCFM_HM_ggWW_SM_total;
6935  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
6936  mela.computeP(pVAMCFM_HM_ggWW_SM_total, true);
6937  cout << "pVAMCFM_HM_ggWW_SM_total: " << pVAMCFM_HM_ggWW_SM_total << '\n' << endl;
6938 
6939  float pVAMCFM_HM_ggWW_0pm_total;
6941  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
6942  mela.selfDHttcoupl[1][gHIGGS_KAPPA][0]=1.;
6943  mela.selfDHbbcoupl[1][gHIGGS_KAPPA][0]=1.;
6944  mela.selfDHzzcoupl[1][0][0]=1.;
6945  mela.computeP(pVAMCFM_HM_ggWW_0pm_total, true);
6946  cout << "pVAMCFM_HM_ggWW_0pm_total: " << pVAMCFM_HM_ggWW_0pm_total << '\n' << endl;
6947 
6948  float pVAMCFM_HM_ggWW_SM_sig;
6949  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
6950  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
6951  mela.computeP(pVAMCFM_HM_ggWW_SM_sig, true);
6952  cout << "pVAMCFM_HM_ggWW_SM_sig: " << pVAMCFM_HM_ggWW_SM_sig << '\n' << endl;
6953 
6954  float pVAMCFM_HM_ggWW_0pm_sig;
6955  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
6956  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
6957  mela.selfDHttcoupl[1][gHIGGS_KAPPA][0]=1.;
6958  mela.selfDHbbcoupl[1][gHIGGS_KAPPA][0]=1.;
6959  mela.selfDHzzcoupl[1][0][0]=1.;
6960  mela.computeP(pVAMCFM_HM_ggWW_0pm_sig, true);
6961  cout << "pVAMCFM_HM_ggWW_0pm_sig: " << pVAMCFM_HM_ggWW_0pm_sig << '\n' << endl;
6962 
6963  float pVAMCFM_HM_ggWW_0m_sig;
6964  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
6965  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
6966  mela.selfDHttcoupl[1][gHIGGS_KAPPA][0]=1.;
6967  mela.selfDHbbcoupl[1][gHIGGS_KAPPA][0]=1.;
6968  mela.selfDHzzcoupl[1][3][0]=1.;
6969  mela.computeP(pVAMCFM_HM_ggWW_0m_sig, true);
6970  cout << "pVAMCFM_HM_ggWW_0m_sig: " << pVAMCFM_HM_ggWW_0m_sig << '\n' << endl;
6971 
6972  /***** ZZ *****/
6973  cindex=1;
6974  mela.setCurrentCandidateFromIndex(cindex);
6975 
6976  // JHUGen ME
6977  float pVAJHUGen_ggZZ_SM_sig;
6979  mela.computeP(pVAJHUGen_ggZZ_SM_sig, true);
6980  cout << "pVAJHUGen_ggZZ_SM_sig: " << pVAJHUGen_ggZZ_SM_sig << '\n' << endl;
6981 
6982  float pVAJHUGen_ggZZ_0pm_sig;
6984  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
6985  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.;
6986  mela.computeP(pVAJHUGen_ggZZ_0pm_sig, true);
6987  cout << "pVAJHUGen_ggZZ_0pm_sig: " << pVAJHUGen_ggZZ_0pm_sig << '\n' << endl;
6988  mela.getIORecord()->getVDaughterCouplings(aL1, aR1, 0);
6989  mela.getIORecord()->getVDaughterCouplings(aL2, aR2, 1);
6990 
6991  float pVAJHUGen_ggZZ_0pm_CT_sig;
6992  //mela.setVerbosity(TVar::DEBUG_VERBOSE);
6994  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
6995  mela.selfDHzpzpcoupl[gHIGGS_VV_1][0]=1.;
6996  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=aL1;
6997  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=aL1;
6998  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=aL1;
6999  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=aL1;
7000  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=aL1;
7001  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=aL1;
7002  mela.selfDZpffcoupl[gHIGGS_Vp_Top_left][0]=aL1;
7003  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=aL1;
7004  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=aL1;
7005  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=aL1;
7006  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=aR1;
7007  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=aR1;
7008  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=aR1;
7009  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_right][0]=aR1;
7010  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=aR1;
7011  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=aR1;
7012  mela.selfDZpffcoupl[gHIGGS_Vp_Top_right][0]=aR1;
7013  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=aR1;
7014  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=aR1;
7015  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=aR1;
7016  mela.selfDM_Zprime=91.1876;
7017  mela.selfDGa_Zprime=2.4952;
7018  mela.computeP(pVAJHUGen_ggZZ_0pm_CT_sig, true);
7019  cout << "pVAJHUGen_ggZZ_0pm_CT_sig: " << pVAJHUGen_ggZZ_0pm_CT_sig << '\n' << endl;
7020  //mela.setVerbosity(verbosity);
7021 
7022  float pVAJHUGen_ggZZ_PS_sig;
7023  mela.setProcess(TVar::H0minus, TVar::JHUGen, TVar::ZZGG);
7024  mela.computeP(pVAJHUGen_ggZZ_PS_sig, true);
7025  cout << "pVAJHUGen_ggZZ_PS_sig: " << pVAJHUGen_ggZZ_PS_sig << '\n' << endl;
7026 
7027  float pVAJHUGen_ggZZ_0m_sig;
7029  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
7030  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.;
7031  mela.computeP(pVAJHUGen_ggZZ_0m_sig, true);
7032  cout << "pVAJHUGen_ggZZ_0m_sig: " << pVAJHUGen_ggZZ_0m_sig << '\n' << endl;
7033 
7034  // MCFM ME
7035  float pVAMCFM_ggZZ_SM_total;
7037  mela.computeP(pVAMCFM_ggZZ_SM_total, true);
7038  cout << "pVAMCFM_ggZZ_SM_total: " << pVAMCFM_ggZZ_SM_total << '\n' << endl;
7039 
7040  float pVAMCFM_ggZZ_0pm_total;
7042  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.;
7043  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.;
7044  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.;
7045  mela.computeP(pVAMCFM_ggZZ_0pm_total, true);
7046  cout << "pVAMCFM_ggZZ_0pm_total: " << pVAMCFM_ggZZ_0pm_total << '\n' << endl;
7047 
7048  float pVAMCFM_ggZZ_SM_sig;
7049  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7050  mela.computeP(pVAMCFM_ggZZ_SM_sig, true);
7051  cout << "pVAMCFM_ggZZ_SM_sig: " << pVAMCFM_ggZZ_SM_sig << '\n' << endl;
7052 
7053  float pVAMCFM_ggZZ_0pm_sig;
7054  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7055  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.;
7056  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.;
7057  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1.;
7058  mela.computeP(pVAMCFM_ggZZ_0pm_sig, true);
7059  cout << "pVAMCFM_ggZZ_0pm_sig: " << pVAMCFM_ggZZ_0pm_sig << '\n' << endl;
7060 
7061  float pVAMCFM_ggZZ_0m_sig;
7062  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7063  mela.selfDHttcoupl[0][gHIGGS_KAPPA][0]=1.;
7064  mela.selfDHbbcoupl[0][gHIGGS_KAPPA][0]=1.;
7065  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1.;
7066  mela.computeP(pVAMCFM_ggZZ_0m_sig, true);
7067  cout << "pVAMCFM_ggZZ_0m_sig: " << pVAMCFM_ggZZ_0m_sig << '\n' << endl;
7068 
7069  // MCFM HM ME
7070  float pVAMCFM_HM_ggZZ_SM_total;
7072  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
7073  mela.computeP(pVAMCFM_HM_ggZZ_SM_total, true);
7074  cout << "pVAMCFM_HM_ggZZ_SM_total: " << pVAMCFM_HM_ggZZ_SM_total << '\n' << endl;
7075 
7076  float pVAMCFM_HM_ggZZ_0pm_total;
7078  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
7079  mela.selfDHttcoupl[1][gHIGGS_KAPPA][0]=1.;
7080  mela.selfDHbbcoupl[1][gHIGGS_KAPPA][0]=1.;
7081  mela.selfDHzzcoupl[1][0][0]=1.;
7082  mela.computeP(pVAMCFM_HM_ggZZ_0pm_total, true);
7083  cout << "pVAMCFM_HM_ggZZ_0pm_total: " << pVAMCFM_HM_ggZZ_0pm_total << '\n' << endl;
7084 
7085  float pVAMCFM_HM_ggZZ_SM_sig;
7086  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7087  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
7088  mela.computeP(pVAMCFM_HM_ggZZ_SM_sig, true);
7089  cout << "pVAMCFM_HM_ggZZ_SM_sig: " << pVAMCFM_HM_ggZZ_SM_sig << '\n' << endl;
7090 
7091  float pVAMCFM_HM_ggZZ_0pm_sig;
7092  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7093  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
7094  mela.selfDHttcoupl[1][gHIGGS_KAPPA][0]=1.;
7095  mela.selfDHbbcoupl[1][gHIGGS_KAPPA][0]=1.;
7096  mela.selfDHzzcoupl[1][0][0]=1.;
7097  mela.computeP(pVAMCFM_HM_ggZZ_0pm_sig, true);
7098  cout << "pVAMCFM_HM_ggZZ_0pm_sig: " << pVAMCFM_HM_ggZZ_0pm_sig << '\n' << endl;
7099 
7100  float pVAMCFM_HM_ggZZ_0m_sig;
7101  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7102  mela.setMelaHiggsMassWidth(-1, 0, 0); mela.setMelaHiggsMassWidth(mPOLE, -1, 1);
7103  mela.selfDHttcoupl[1][gHIGGS_KAPPA][0]=1.;
7104  mela.selfDHbbcoupl[1][gHIGGS_KAPPA][0]=1.;
7105  mela.selfDHzzcoupl[1][3][0]=1.;
7106  mela.computeP(pVAMCFM_HM_ggZZ_0m_sig, true);
7107  cout << "pVAMCFM_HM_ggZZ_0m_sig: " << pVAMCFM_HM_ggZZ_0m_sig << '\n' << endl;
7108 
7109  /***** ZG *****/
7110  cindex=2;
7111  mela.setCurrentCandidateFromIndex(cindex);
7112  float pVAJHUGen_ggZG_SM_sig;
7113  mela.setProcess(TVar::H0_Zgs, TVar::JHUGen, TVar::ZZGG);
7114  mela.computeP(pVAJHUGen_ggZG_SM_sig, true);
7115  cout << "pVAJHUGen_ggZG_SM_sig: " << pVAJHUGen_ggZG_SM_sig << '\n' << endl;
7116 
7117  float pVAJHUGen_ggZG_0pm_sig;
7119  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
7120  mela.selfDHzzcoupl[0][gHIGGS_ZA_2][0]=1.;
7121  mela.computeP(pVAJHUGen_ggZG_0pm_sig, true);
7122  cout << "pVAJHUGen_ggZG_0pm_sig: " << pVAJHUGen_ggZG_0pm_sig << '\n' << endl;
7123 
7124  float pVAJHUGen_ggZG_PS_sig;
7126  mela.computeP(pVAJHUGen_ggZG_PS_sig, true);
7127  cout << "pVAJHUGen_ggZG_PS_sig: " << pVAJHUGen_ggZG_PS_sig << '\n' << endl;
7128 
7129  float pVAJHUGen_ggZG_0m_sig;
7131  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
7132  mela.selfDHzzcoupl[0][gHIGGS_ZA_4][0]=1.;
7133  mela.computeP(pVAJHUGen_ggZG_0m_sig, true);
7134  cout << "pVAJHUGen_ggZG_0m_sig: " << pVAJHUGen_ggZG_0m_sig << '\n' << endl;
7135 
7136  float pVAMCFM_qqZG_bkg;
7138  mela.computeP(pVAMCFM_qqZG_bkg, true);
7139  cout << "pVAMCFM_qqZG_bkg: " << pVAMCFM_qqZG_bkg << '\n' << endl;
7140 
7141  /***** GG *****/
7142  cindex=3;
7143  mela.setCurrentCandidateFromIndex(cindex);
7144  float pVAJHUGen_ggGG_SM_sig;
7145  mela.setProcess(TVar::H0_gsgs, TVar::JHUGen, TVar::ZZGG);
7146  mela.computeP(pVAJHUGen_ggGG_SM_sig, true);
7147  cout << "pVAJHUGen_ggGG_SM_sig: " << pVAJHUGen_ggGG_SM_sig << '\n' << endl;
7148 
7149  float pVAJHUGen_ggGG_0pm_sig;
7151  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
7152  mela.selfDHzzcoupl[0][gHIGGS_AA_2][0]=1.;
7153  mela.computeP(pVAJHUGen_ggGG_0pm_sig, true);
7154  cout << "pVAJHUGen_ggGG_0pm_sig: " << pVAJHUGen_ggGG_0pm_sig << '\n' << endl;
7155 
7156  float pVAJHUGen_ggGG_PS_sig;
7158  mela.computeP(pVAJHUGen_ggGG_PS_sig, true);
7159  cout << "pVAJHUGen_ggGG_PS_sig: " << pVAJHUGen_ggGG_PS_sig << '\n' << endl;
7160 
7161  float pVAJHUGen_ggGG_0m_sig;
7163  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1.;
7164  mela.selfDHzzcoupl[0][gHIGGS_AA_4][0]=1.;
7165  mela.computeP(pVAJHUGen_ggGG_0m_sig, true);
7166  cout << "pVAJHUGen_ggGG_0m_sig: " << pVAJHUGen_ggGG_0m_sig << '\n' << endl;
7167 
7168  float pVAMCFM_ggGG_bkg;
7170  mela.computeP(pVAMCFM_ggGG_bkg, true);
7171  cout << "pVAMCFM_ggGG_bkg: " << pVAMCFM_ggGG_bkg << '\n' << endl;
7172 
7173  float pVAMCFM_qqGG_bkg;
7175  mela.computeP(pVAMCFM_qqGG_bkg, true);
7176  cout << "pVAMCFM_qqGG_bkg: " << pVAMCFM_qqGG_bkg << '\n' << endl;
7177 
7178 
7179  if (verbosity>=TVar::DEBUG){
7180  cout << "Removing Mela candidates\nSummary:" << endl;
7181  for (int ic=0; ic<mela.getNCandidates(); ic++){
7182  cout << "Candidate " << ic << endl;
7183  mela.setCurrentCandidateFromIndex(ic);
7184  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
7185  }
7186  cout << endl;
7187  }
7188  mela.resetInputEvent();
7189  cout << "Removed..." << endl;
7190  }
7191 
7192  cout.rdbuf(coutbuf);
7193  tout.close();
7194  mela.setVerbosity(bkpverbosity);
7195 }
7196 
7197 void testME_ProdDec_JHUGen_SpinTwo_Ping(int flavor=2, shared_ptr<Mela> melaptr=nullptr){
7198  ofstream tout(TString("testME_ProdDec_JHUGen_SpinTwo_Ping_")+long(flavor)+".out");
7199  streambuf* coutbuf = cout.rdbuf();
7200  cout.rdbuf(tout.rdbuf());
7201 
7202  int erg_tev=13;
7203  float mPOLE=125.;
7204  float wPOLE=4.07e-3;
7205 
7206  TVar::VerbosityLevel verbosity = TVar::ERROR;
7207  if (!melaptr) melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
7208  Mela& mela = *melaptr;
7209  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
7210  mela.setVerbosity(verbosity);
7211  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
7212  mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 80.399, 91.1876, 0.23119);
7213 
7214  double aL1, aL2, aR1, aR2;
7215 
7216  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
7217  /*
7218  const int nEntries = 3;
7219  double l1_array[nEntries][4] = {
7220  {1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332},
7221  {238.65751023078761, 9.2808858562825005, 15.827726043466324, -237.95116187061188},
7222  {101.52463181523598, 27.359569630718468, -0.90299073100241323, -97.764458892691749}
7223  };
7224  double l2_array[nEntries][4] = {
7225  {22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371},
7226  {101.67043553688544, 2.1169375132239789, 0.77953005873937187, -101.64540506443268},
7227  {24.717634703436786, -1.1722249478288802, -5.9599387484197646, -23.959684558009428}
7228  };
7229  double l3_array[nEntries][4] = {
7230  {1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620},
7231  {317.81904277258536, 2.5882005498984775, 21.352807448987718, -317.09037005377883},
7232  {180.10885677707822, -6.7240759244122792, 35.742176497019194, -176.39865053838915}
7233  };
7234  double l4_array[nEntries][4] = {
7235  {471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354},
7236  {95.655512770627581, -13.986023919404957, -37.960063551193414, -86.679881365440792},
7237  {49.137252081251319, -19.463268758477309, -28.879247017597017, -34.664676589120688}
7238  };
7239  */
7240  const int nEntries = 6;
7241  double l1_array[nEntries][4] ={
7242  { 51.374202, 25.924766, 12.290178, 42.616376 },
7243  { 51.374202, 25.924766, 12.290178, 42.616376 },
7244  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
7245  { 1365.4973807340846, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Massless
7246  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 }, // Muon via E
7247  { 1365.4973848483, 10.289826593755228, 25.205694382277809, -1365.2259480507332 } // Muon via E
7248  };
7249  double l2_array[nEntries][4] ={
7250  { 271.875752, 70.427173, -11.138146, 261.769598 },
7251  { 21.481452, 9.489680, -9.336587, 16.858699 },
7252  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
7253  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
7254  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
7255  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 }
7256  };
7257  double l3_array[nEntries][4] ={
7258  { 75.823478, -16.640412, 23.246999, 70.227220 },
7259  { 75.823478, -16.640412, 23.246999, 70.227220 },
7260  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
7261  { 1895.7562628816693, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
7262  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 },
7263  { 1895.7562658451, 25.837804322120054, -28.821887970086259, -1895.3610513294620 }
7264  };
7265  double l4_array[nEntries][4] ={
7266  { 21.481452, 9.489680, -9.336587, 16.858699 },
7267  { 271.875752, 70.427173, -11.138146, 261.769598 },
7268  { 471.71918486784784, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
7269  { 22.786181013986834, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 },
7270  { 471.7191967775, -35.976267906053060, 4.5169691019519895, -470.32360615864354 },
7271  { 22.7864275656, -0.15136300982222117, -0.90077551414353962, -22.767866345236371 }
7272  };
7273 
7274  for (int ev = 0; ev < 1; ev++){
7275  if (flavor == 2){
7276  GenLep1Id=13;
7277  GenLep2Id=-13;
7278  GenLep3Id=11;
7279  GenLep4Id=-11;
7280  }
7281  else if (flavor == 1){
7282  GenLep1Id=11;
7283  GenLep2Id=-11;
7284  GenLep3Id=11;
7285  GenLep4Id=-11;
7286  }
7287  else if (flavor == 0){
7288  GenLep1Id=13;
7289  GenLep2Id=-13;
7290  GenLep3Id=13;
7291  GenLep4Id=-13;
7292  }
7293  else if (flavor == 3){
7294  GenLep1Id=14;
7295  GenLep2Id=-14;
7296  GenLep3Id=13;
7297  GenLep4Id=-13;
7298  }
7299  else if (flavor == 4){
7300  GenLep1Id=0;
7301  GenLep2Id=-0;
7302  GenLep3Id=1;
7303  GenLep4Id=-1;
7304  }
7305  else if (flavor == 5){
7306  GenLep1Id=1;
7307  GenLep2Id=-1;
7308  GenLep3Id=2;
7309  GenLep4Id=-2;
7310  }
7311 
7312  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
7313  int idOrdered_WW[4] ={ 11, -12, -11, 12 };
7314  TLorentzVector pOrdered[4];
7315  pOrdered[0].SetXYZT(l1_array[ev][1], l1_array[ev][2], l1_array[ev][3], l1_array[ev][0]);
7316  pOrdered[1].SetXYZT(l2_array[ev][1], l2_array[ev][2], l2_array[ev][3], l2_array[ev][0]);
7317  pOrdered[2].SetXYZT(l3_array[ev][1], l3_array[ev][2], l3_array[ev][3], l3_array[ev][0]);
7318  pOrdered[3].SetXYZT(l4_array[ev][1], l4_array[ev][2], l4_array[ev][3], l4_array[ev][0]);
7319  SimpleParticleCollection_t daughters_WW;
7320  for (unsigned int idau=0; idau<4; idau++) daughters_WW.push_back(SimpleParticle_t(idOrdered_WW[idau], pOrdered[idau]));
7321  SimpleParticleCollection_t daughters_WWasZZ;
7322  for (unsigned int iv=0; iv<2; iv++){ for (int ivd=0; ivd<2; ivd++) daughters_WWasZZ.push_back(SimpleParticle_t(idOrdered_WW[iv+2*ivd], pOrdered[iv+2*ivd])); }
7323  SimpleParticleCollection_t daughters_ZZ;
7324  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
7325 
7326  TLorentzVector pOrdered_ZG[3];
7327  pOrdered_ZG[0]=pOrdered[0];
7328  pOrdered_ZG[1]=pOrdered[1];
7329  pOrdered_ZG[2]=pOrdered[2]+pOrdered[3];
7330  SimpleParticleCollection_t daughters_ZG;
7331  for (unsigned int idau=0; idau<2; idau++) daughters_ZG.push_back(SimpleParticle_t(idOrdered[idau], pOrdered_ZG[idau]));
7332  for (unsigned int idau=2; idau<3; idau++) daughters_ZG.push_back(SimpleParticle_t(22, pOrdered_ZG[idau]));
7333 
7334  TLorentzVector pOrdered_GG[3];
7335  pOrdered_GG[0]=pOrdered[0]+pOrdered[1];
7336  pOrdered_GG[1]=pOrdered[2]+pOrdered[3];
7337  SimpleParticleCollection_t daughters_GG;
7338  for (unsigned int idau=0; idau<2; idau++) daughters_GG.push_back(SimpleParticle_t(22, pOrdered_GG[idau]));
7339 
7340  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
7341  mela.setInputEvent(&daughters_WW, (SimpleParticleCollection_t*) 0, (SimpleParticleCollection_t*) 0, false);
7342  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
7343  mela.setInputEvent(&daughters_ZZ, (SimpleParticleCollection_t*) 0, (SimpleParticleCollection_t*) 0, false);
7344  mela.setInputEvent(&daughters_ZG, (SimpleParticleCollection_t*) 0, (SimpleParticleCollection_t*) 0, false);
7345  mela.setCandidateDecayMode(TVar::CandidateDecay_GG);
7346  mela.setInputEvent(&daughters_GG, (SimpleParticleCollection_t*) 0, (SimpleParticleCollection_t*) 0, false);
7347 
7348  int cindex;
7349 
7350  /***** WW *****/
7351  cindex=0;
7352  mela.setCurrentCandidateFromIndex(cindex);
7353 
7354  // JHUGen ME
7355  float pVAJHUGen_ggWW_a1_b1_sig;
7356  //mela.setVerbosity(TVar::DEBUG_VERBOSE);
7358  mela.selfDGggcoupl[gGRAVITON_GG_1][0]=1.;
7359  mela.selfDGvvcoupl[gGRAVITON_VV_1][0]=1.;
7360  mela.computeP(pVAJHUGen_ggWW_a1_b1_sig, true);
7361  cout << "pVAJHUGen_ggWW_a1_b1_sig: " << pVAJHUGen_ggWW_a1_b1_sig << '\n' << endl;
7362  //mela.setVerbosity(verbosity);
7363  mela.getIORecord()->getVDaughterCouplings(aL1, aR1, 0);
7364  mela.getIORecord()->getVDaughterCouplings(aL2, aR2, 1);
7365  //cout << "aL/R 1, 2 = " << aL1 << ", " << aR1 << ", " << aL2 << ", " << aR2 << endl;
7366 
7367  float pVAJHUGen_ggWW_a1_b1_CT_sig;
7368  //mela.setVerbosity(TVar::DEBUG_VERBOSE);
7370  mela.selfDGggcoupl[gGRAVITON_GG_1][0]=1.;
7371  mela.selfDGvpvpcoupl[gGRAVITON_VV_1][0]=1.;
7372  mela.selfDWpffcoupl[gHIGGS_Vp_El_left][0]=aL1;
7373  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_left][0]=aL1;
7374  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_left][0]=aL1;
7375  mela.selfDWpffcoupl[gHIGGS_Vp_Up_left][0]=aL1;
7376  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_left][0]=aL1;
7377  mela.selfDWpffcoupl[gHIGGS_Vp_Top_left][0]=aL1;
7378  mela.selfDWpffcoupl[gHIGGS_Vp_El_right][0]=aR1;
7379  mela.selfDWpffcoupl[gHIGGS_Vp_Mu_right][0]=aR1;
7380  mela.selfDWpffcoupl[gHIGGS_Vp_Ta_right][0]=aR1;
7381  mela.selfDWpffcoupl[gHIGGS_Vp_Up_right][0]=aR1;
7382  mela.selfDWpffcoupl[gHIGGS_Vp_Chm_right][0]=aR1;
7383  mela.selfDWpffcoupl[gHIGGS_Vp_Top_right][0]=aR1;
7384  mela.selfDM_Wprime=80.399;
7385  mela.selfDGa_Wprime=2.085;
7386  mela.computeP(pVAJHUGen_ggWW_a1_b1_CT_sig, true);
7387  cout << "pVAJHUGen_ggWW_a1_b1_CT_sig: " << pVAJHUGen_ggWW_a1_b1_CT_sig << '\n' << endl;
7388  //mela.setVerbosity(verbosity);
7389 
7390 
7391  /***** ZZ *****/
7392  cindex=1;
7393  mela.setCurrentCandidateFromIndex(cindex);
7394 
7395  // JHUGen ME
7396  float pVAJHUGen_ggZZ_a1_b1_sig;
7398  mela.selfDGggcoupl[gGRAVITON_GG_1][0]=1.;
7399  mela.selfDGvvcoupl[gGRAVITON_VV_1][0]=1.;
7400  mela.computeP(pVAJHUGen_ggZZ_a1_b1_sig, true);
7401  cout << "pVAJHUGen_ggZZ_a1_b1_sig: " << pVAJHUGen_ggZZ_a1_b1_sig << '\n' << endl;
7402  mela.getIORecord()->getVDaughterCouplings(aL1, aR1, 0);
7403  mela.getIORecord()->getVDaughterCouplings(aL2, aR2, 1);
7404  //cout << "aL/R 1, 2 = " << aL1 << ", " << aR1 << ", " << aL2 << ", " << aR2 << endl;
7405 
7406  float pVAJHUGen_ggZZ_a1_b1_CT_sig;
7408  mela.selfDGggcoupl[gGRAVITON_GG_1][0]=1.;
7409  mela.selfDGvpvpcoupl[gGRAVITON_VV_1][0]=1.;
7410  mela.selfDZpffcoupl[gHIGGS_Vp_El_left][0]=aL1;
7411  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_left][0]=aL1;
7412  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_left][0]=aL1;
7413  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_left][0]=aL1;
7414  mela.selfDZpffcoupl[gHIGGS_Vp_Up_left][0]=aL1;
7415  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_left][0]=aL1;
7416  mela.selfDZpffcoupl[gHIGGS_Vp_Top_left][0]=aL1;
7417  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_left][0]=aL1;
7418  mela.selfDZpffcoupl[gHIGGS_Vp_Str_left][0]=aL1;
7419  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_left][0]=aL1;
7420  mela.selfDZpffcoupl[gHIGGS_Vp_El_right][0]=aR1;
7421  mela.selfDZpffcoupl[gHIGGS_Vp_Mu_right][0]=aR1;
7422  mela.selfDZpffcoupl[gHIGGS_Vp_Ta_right][0]=aR1;
7423  mela.selfDZpffcoupl[gHIGGS_Vp_NuE_right][0]=aR1;
7424  mela.selfDZpffcoupl[gHIGGS_Vp_Up_right][0]=aR1;
7425  mela.selfDZpffcoupl[gHIGGS_Vp_Chm_right][0]=aR1;
7426  mela.selfDZpffcoupl[gHIGGS_Vp_Top_right][0]=aR1;
7427  mela.selfDZpffcoupl[gHIGGS_Vp_Dn_right][0]=aR1;
7428  mela.selfDZpffcoupl[gHIGGS_Vp_Str_right][0]=aR1;
7429  mela.selfDZpffcoupl[gHIGGS_Vp_Bot_right][0]=aR1;
7430  mela.selfDM_Zprime=91.1876;
7431  mela.selfDGa_Zprime=2.4952;
7432  mela.computeP(pVAJHUGen_ggZZ_a1_b1_CT_sig, true);
7433  cout << "pVAJHUGen_ggZZ_a1_b1_CT_sig: " << pVAJHUGen_ggZZ_a1_b1_CT_sig << '\n' << endl;
7434 
7435  /***** ZG *****/
7436  cindex=2;
7437  mela.setCurrentCandidateFromIndex(cindex);
7438  float pVAJHUGen_ggZG_a1_b1_sig;
7440  mela.selfDGggcoupl[gGRAVITON_GG_1][0]=1.;
7441  mela.selfDGvvcoupl[gGRAVITON_ZA_1][0]=1.;
7442  mela.computeP(pVAJHUGen_ggZG_a1_b1_sig, true);
7443  cout << "pVAJHUGen_ggZG_a1_b1_sig: " << pVAJHUGen_ggZG_a1_b1_sig << '\n' << endl;
7444 
7445  /***** GG *****/
7446  cindex=3;
7447  mela.setCurrentCandidateFromIndex(cindex);
7448  float pVAJHUGen_ggGG_a1_b1_sig;
7450  mela.selfDGggcoupl[gGRAVITON_GG_1][0]=1.;
7451  mela.selfDGvvcoupl[gGRAVITON_AA_1][0]=1.;
7452  mela.computeP(pVAJHUGen_ggGG_a1_b1_sig, true);
7453  cout << "pVAJHUGen_ggGG_a1_b1_sig: " << pVAJHUGen_ggGG_a1_b1_sig << '\n' << endl;
7454 
7455  if (verbosity>=TVar::DEBUG){
7456  cout << "Removing Mela candidates\nSummary:" << endl;
7457  for (int ic=0; ic<mela.getNCandidates(); ic++){
7458  cout << "Candidate " << ic << endl;
7459  mela.setCurrentCandidateFromIndex(ic);
7460  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
7461  }
7462  cout << endl;
7463  }
7464  mela.resetInputEvent();
7465  cout << "Removed..." << endl;
7466  }
7467 
7468  cout.rdbuf(coutbuf);
7469  tout.close();
7470  mela.setVerbosity(bkpverbosity);
7471 }
7472 
7473 void testME_Dec_FullSim(int flavor=2, bool useConstants=false, bool useBkgSample=false, shared_ptr<Mela> melaptr=nullptr){
7474  int erg_tev=8;
7475  float mPOLE=125.6;
7476  float wPOLE=4.07e-3;
7477  TString TREE_NAME = "SelectedTree";
7478 
7479  TVar::VerbosityLevel verbosity = TVar::ERROR;
7480  if (!melaptr) {
7481  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
7482  }
7483  Mela& mela = *melaptr;
7484  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
7485  mela.setVerbosity(verbosity);
7486  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
7487  mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 80.399, 91.1876, 0.23119);
7488 
7489  TString cinput_main = "/scratch0/hep/ianderso/CJLST/140519/PRODFSR_8TeV";
7490  TFile* finput;
7491  TFile* foutput;
7492  if (!useBkgSample){
7493  finput = new TFile(Form("%s/%s/HZZ4lTree_powheg15jhuGenV3-0PMH125.6.root", cinput_main.Data(), (flavor>=2 ? "2mu2e" : "4e")), "read");
7494  foutput = new TFile(Form("HZZ4lTree_powheg15jhuGenV3-0PMH125.6_%s_OriginalMEv2ValidationTestOnly.root", (flavor>=2 ? "2mu2e" : "4e")), "recreate");
7495  }
7496  else{
7497  finput = new TFile(Form("%s/%s/HZZ4lTree_ZZTo%s.root", cinput_main.Data(), (flavor>=2 ? "2mu2e" : "4e"), (flavor==2 ? "2e2mu" : "4e")), "read");
7498  foutput = new TFile(Form("HZZ4lTree_ZZTo%s_OriginalMEv2ValidationTestOnly.root", (flavor>=2 ? "2e2mu" : "4e")), "recreate");
7499  }
7500 
7501  float p0plus_VAJHU;
7502  float p0hplus_VAJHU;
7503  float p0minus_VAJHU;
7504  float p0_g1prime2_VAJHU;
7505  float pg1g1prime2_VAJHU;
7506  //float pg1g1prime2_pi2_VAJHU;
7507  float pg1g2_VAJHU;
7508  float pg1g2_pi2_VAJHU;
7509  float pg1g4_VAJHU;
7510  float pg1g4_pi2_VAJHU;
7511 
7512  float p0plus_VAJHU_NEW;
7513  float p0hplus_VAJHU_NEW;
7514  float p0minus_VAJHU_NEW;
7515  float p0_g1prime2_VAJHU_NEW;
7516  float pg1g1prime2_VAJHU_NEW;
7517  float pg1g1prime2_pi2_VAJHU_NEW;
7518  float pg1g2_VAJHU_NEW;
7519  float pg1g2_pi2_VAJHU_NEW;
7520  float pg1g4_VAJHU_NEW;
7521  float pg1g4_pi2_VAJHU_NEW;
7522 
7523  float p0hplus_VAMCFM_NEW;
7524  float p0minus_VAMCFM_NEW;
7525  float p0_g1prime2_VAMCFM_NEW;
7526  float pg1g1prime2_VAMCFM_NEW;
7527  float pg1g1prime2_pi2_VAMCFM_NEW;
7528  float pg1g2_VAMCFM_NEW;
7529  float pg1g2_pi2_VAMCFM_NEW;
7530  float pg1g4_VAMCFM_NEW;
7531  float pg1g4_pi2_VAMCFM_NEW;
7532 
7533  float p0hplus_VAMCFM_ratio_NEW;
7534  float p0minus_VAMCFM_ratio_NEW;
7535  float p0_g1prime2_VAMCFM_ratio_NEW;
7536  float pg1g1prime2_VAMCFM_ratio_NEW;
7537  float pg1g1prime2_pi2_VAMCFM_ratio_NEW;
7538  float pg1g2_VAMCFM_ratio_NEW;
7539  float pg1g2_pi2_VAMCFM_ratio_NEW;
7540  float pg1g4_VAMCFM_ratio_NEW;
7541  float pg1g4_pi2_VAMCFM_ratio_NEW;
7542 
7543  float p0hplus_VAJHU_ratio_NEW;
7544  float p0minus_VAJHU_ratio_NEW;
7545  float p0_g1prime2_VAJHU_ratio_NEW;
7546  float pg1g1prime2_VAJHU_ratio_NEW;
7547  float pg1g1prime2_pi2_VAJHU_ratio_NEW;
7548  float pg1g2_VAJHU_ratio_NEW;
7549  float pg1g2_pi2_VAJHU_ratio_NEW;
7550  float pg1g4_VAJHU_ratio_NEW;
7551  float pg1g4_pi2_VAJHU_ratio_NEW;
7552 
7553  float p0plus_VAMCFM, ggzz_p0plus_VAMCFM;
7554  float bkg_VAMCFM, ggzz_VAMCFM;
7555  float p0plus_VAMCFM_NEW, ggzz_p0plus_VAMCFM_NEW, p0plus_VAMCFM_NEW_BSMOn;
7556  float bkg_VAMCFM_NEW, ggzz_VAMCFM_NEW;
7557  //float bkg_VAMCFM_STU, bkg_VAMCFM_TU, bkg_VAMCFM_S;
7558 
7559  float mzz = 126.;
7560  float m1 = 91.471450;
7561  float m2 = 12.139782;
7562  float h1 = 0.2682896;
7563  float h2 = 0.1679779;
7564  float phi = 1.5969792;
7565  float hs = -0.727181;
7566  float phi1 = 1.8828257;
7567 
7568  TTree* tree = (TTree*)finput->Get(TREE_NAME);
7569  tree->SetBranchAddress("ZZMass", &mzz);
7570  tree->SetBranchAddress("Z1Mass", &m1);
7571  tree->SetBranchAddress("Z2Mass", &m2);
7572  tree->SetBranchAddress("helcosthetaZ1", &h1);
7573  tree->SetBranchAddress("helcosthetaZ2", &h2);
7574  tree->SetBranchAddress("helphi", &phi);
7575  tree->SetBranchAddress("costhetastar", &hs);
7576  tree->SetBranchAddress("phistarZ1", &phi1);
7577  tree->SetBranchAddress("p0plus_VAJHU", &p0plus_VAJHU);
7578  tree->SetBranchAddress("p0hplus_VAJHU", &p0hplus_VAJHU);
7579  tree->SetBranchAddress("p0minus_VAJHU", &p0minus_VAJHU);
7580  tree->SetBranchAddress("p0_g1prime2_VAJHU", &p0_g1prime2_VAJHU);
7581  tree->SetBranchAddress("pg1g2_VAJHU", &pg1g2_VAJHU);
7582  tree->SetBranchAddress("pg1g2_pi2_VAJHU", &pg1g2_pi2_VAJHU);
7583  tree->SetBranchAddress("pg1g4_VAJHU", &pg1g4_VAJHU);
7584  tree->SetBranchAddress("pg1g4_pi2_VAJHU", &pg1g4_pi2_VAJHU);
7585  tree->SetBranchAddress("pg1g1prime2_VAJHU", &pg1g1prime2_VAJHU);
7586  tree->SetBranchAddress("bkg_VAMCFM", &bkg_VAMCFM);
7587  tree->SetBranchAddress("ggzz_VAMCFM", &ggzz_VAMCFM);
7588  tree->SetBranchAddress("p0plus_VAMCFM", &p0plus_VAMCFM);
7589  tree->SetBranchAddress("ggzz_p0plus_VAMCFM", &ggzz_p0plus_VAMCFM);
7590 
7591  TTree* newtree = new TTree("TestTree", "");
7592  newtree->Branch("ZZMass", &mzz);
7593  newtree->Branch("Z1Mass", &m1);
7594  newtree->Branch("Z2Mass", &m2);
7595  newtree->Branch("helcosthetaZ1", &h1);
7596  newtree->Branch("helcosthetaZ2", &h2);
7597  newtree->Branch("helphi", &phi);
7598  newtree->Branch("costhetastar", &hs);
7599  newtree->Branch("phistarZ1", &phi1);
7600 
7601  newtree->Branch("p0plus_VAJHU", &p0plus_VAJHU);
7602  newtree->Branch("p0hplus_VAJHU", &p0hplus_VAJHU);
7603  newtree->Branch("p0minus_VAJHU", &p0minus_VAJHU);
7604  newtree->Branch("p0_g1prime2_VAJHU", &p0_g1prime2_VAJHU);
7605  newtree->Branch("pg1g2_VAJHU", &pg1g2_VAJHU);
7606  newtree->Branch("pg1g2_pi2_VAJHU", &pg1g2_pi2_VAJHU);
7607  newtree->Branch("pg1g4_VAJHU", &pg1g4_VAJHU);
7608  newtree->Branch("pg1g4_pi2_VAJHU", &pg1g4_pi2_VAJHU);
7609  newtree->Branch("pg1g1prime2_VAJHU", &pg1g1prime2_VAJHU);
7610 
7611  newtree->Branch("p0plus_VAJHU_NEW", &p0plus_VAJHU_NEW);
7612  newtree->Branch("p0hplus_VAJHU_NEW", &p0hplus_VAJHU_NEW);
7613  newtree->Branch("p0minus_VAJHU_NEW", &p0minus_VAJHU_NEW);
7614  newtree->Branch("p0_g1prime2_VAJHU_NEW", &p0_g1prime2_VAJHU_NEW);
7615  newtree->Branch("pg1g2_VAJHU_NEW", &pg1g2_VAJHU_NEW);
7616  newtree->Branch("pg1g2_pi2_VAJHU_NEW", &pg1g2_pi2_VAJHU_NEW);
7617  newtree->Branch("pg1g4_VAJHU_NEW", &pg1g4_VAJHU_NEW);
7618  newtree->Branch("pg1g4_pi2_VAJHU_NEW", &pg1g4_pi2_VAJHU_NEW);
7619  newtree->Branch("pg1g1prime2_VAJHU_NEW", &pg1g1prime2_VAJHU_NEW);
7620  newtree->Branch("pg1g1prime2_pi2_VAJHU_NEW", &pg1g1prime2_pi2_VAJHU_NEW);
7621 
7622 
7623  newtree->Branch("bkg_VAMCFM", &bkg_VAMCFM);
7624  newtree->Branch("ggzz_VAMCFM", &ggzz_VAMCFM);
7625  newtree->Branch("p0plus_VAMCFM", &p0plus_VAMCFM);
7626  newtree->Branch("ggzz_p0plus_VAMCFM", &ggzz_p0plus_VAMCFM);
7627  newtree->Branch("bkg_VAMCFM_NEW", &bkg_VAMCFM_NEW);
7628  newtree->Branch("ggzz_VAMCFM_NEW", &ggzz_VAMCFM_NEW);
7629  newtree->Branch("p0plus_VAMCFM_NEW", &p0plus_VAMCFM_NEW);
7630  newtree->Branch("ggzz_p0plus_VAMCFM_NEW", &ggzz_p0plus_VAMCFM_NEW);
7631  newtree->Branch("p0plus_VAMCFM_NEW_BSMOn", &p0plus_VAMCFM_NEW_BSMOn);
7632 
7633  newtree->Branch("p0hplus_VAMCFM_NEW", &p0hplus_VAMCFM_NEW);
7634  newtree->Branch("p0minus_VAMCFM_NEW", &p0minus_VAMCFM_NEW);
7635  newtree->Branch("p0_g1prime2_VAMCFM_NEW", &p0_g1prime2_VAMCFM_NEW);
7636  newtree->Branch("pg1g2_VAMCFM_NEW", &pg1g2_VAMCFM_NEW);
7637  newtree->Branch("pg1g2_pi2_VAMCFM_NEW", &pg1g2_pi2_VAMCFM_NEW);
7638  newtree->Branch("pg1g4_VAMCFM_NEW", &pg1g4_VAMCFM_NEW);
7639  newtree->Branch("pg1g4_pi2_VAMCFM_NEW", &pg1g4_pi2_VAMCFM_NEW);
7640  newtree->Branch("pg1g1prime2_VAMCFM_NEW", &pg1g1prime2_VAMCFM_NEW);
7641  newtree->Branch("pg1g1prime2_pi2_VAMCFM_NEW", &pg1g1prime2_pi2_VAMCFM_NEW);
7642 
7643  newtree->Branch("p0hplus_VAMCFM_ratio_NEW", &p0hplus_VAMCFM_ratio_NEW);
7644  newtree->Branch("p0minus_VAMCFM_ratio_NEW", &p0minus_VAMCFM_ratio_NEW);
7645  newtree->Branch("p0_g1prime2_VAMCFM_ratio_NEW", &p0_g1prime2_VAMCFM_ratio_NEW);
7646  newtree->Branch("pg1g2_VAMCFM_ratio_NEW", &pg1g2_VAMCFM_ratio_NEW);
7647  newtree->Branch("pg1g2_pi2_VAMCFM_ratio_NEW", &pg1g2_pi2_VAMCFM_ratio_NEW);
7648  newtree->Branch("pg1g4_VAMCFM_ratio_NEW", &pg1g4_VAMCFM_ratio_NEW);
7649  newtree->Branch("pg1g4_pi2_VAMCFM_ratio_NEW", &pg1g4_pi2_VAMCFM_ratio_NEW);
7650  newtree->Branch("pg1g1prime2_VAMCFM_ratio_NEW", &pg1g1prime2_VAMCFM_ratio_NEW);
7651  newtree->Branch("pg1g1prime2_pi2_VAMCFM_ratio_NEW", &pg1g1prime2_pi2_VAMCFM_ratio_NEW);
7652 
7653  newtree->Branch("p0hplus_VAJHU_ratio_NEW", &p0hplus_VAJHU_ratio_NEW);
7654  newtree->Branch("p0minus_VAJHU_ratio_NEW", &p0minus_VAJHU_ratio_NEW);
7655  newtree->Branch("p0_g1prime2_VAJHU_ratio_NEW", &p0_g1prime2_VAJHU_ratio_NEW);
7656  newtree->Branch("pg1g2_VAJHU_ratio_NEW", &pg1g2_VAJHU_ratio_NEW);
7657  newtree->Branch("pg1g2_pi2_VAJHU_ratio_NEW", &pg1g2_pi2_VAJHU_ratio_NEW);
7658  newtree->Branch("pg1g4_VAJHU_ratio_NEW", &pg1g4_VAJHU_ratio_NEW);
7659  newtree->Branch("pg1g4_pi2_VAJHU_ratio_NEW", &pg1g4_pi2_VAJHU_ratio_NEW);
7660  newtree->Branch("pg1g1prime2_VAJHU_ratio_NEW", &pg1g1prime2_VAJHU_ratio_NEW);
7661  newtree->Branch("pg1g1prime2_pi2_VAJHU_ratio_NEW", &pg1g1prime2_pi2_VAJHU_ratio_NEW);
7662 
7663  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
7664  if (flavor == 2){
7665  GenLep1Id=13;
7666  GenLep2Id=-13;
7667  GenLep3Id=11;
7668  GenLep4Id=-11;
7669  }
7670  else if (flavor == 1){
7671  GenLep1Id=11;
7672  GenLep2Id=-11;
7673  GenLep3Id=11;
7674  GenLep4Id=-11;
7675  }
7676  else if (flavor == 0){
7677  GenLep1Id=13;
7678  GenLep2Id=-13;
7679  GenLep3Id=13;
7680  GenLep4Id=-13;
7681  }
7682  else if (flavor == 3){
7683  GenLep1Id=14;
7684  GenLep2Id=-14;
7685  GenLep3Id=13;
7686  GenLep4Id=-13;
7687  }
7688  else if (flavor == 4){
7689  GenLep1Id=0;
7690  GenLep2Id=-0;
7691  GenLep3Id=1;
7692  GenLep4Id=-1;
7693  }
7694  else if (flavor == 5){
7695  GenLep1Id=1;
7696  GenLep2Id=-1;
7697  GenLep3Id=2;
7698  GenLep4Id=-2;
7699  }
7700  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
7701 
7702  for (int ev = 0; ev < (!useBkgSample ? min(1000, (int)tree->GetEntries()) : (int)tree->GetEntries()); ev++){
7703  tree->GetEntry(ev);
7704 
7705  if (ev%10000 == 0) cout << "Processing event " << ev << endl;
7706 
7707  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
7708  TLorentzVector pOrdered[4];
7709  std::vector<TLorentzVector> daus = mela.calculate4Momentum(mzz, m1, m2, acos(hs), acos(h1), acos(h2), phi1, phi);
7710  for (int ip=0; ip<min(4, (int)daus.size()); ip++) pOrdered[ip]=daus.at(ip);
7711  SimpleParticleCollection_t daughters_ZZ;
7712  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
7713  mela.setInputEvent(&daughters_ZZ, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
7714 
7715  /***** ZZ *****/
7716  if (verbosity>=TVar::DEBUG) cout << "Computing bkg_VAMCFM_NEW" << endl;
7717  mela.setProcess(TVar::bkgZZ, TVar::MCFM, TVar::ZZQQB);
7718  mela.computeP(bkg_VAMCFM_NEW, useConstants);
7719 
7720  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_VAMCFM_NEW" << endl;
7721  mela.setProcess(TVar::bkgZZ, TVar::MCFM, TVar::ZZGG);
7722  //mela.setMelaLeptonInterference(TVar::InterfOff);
7723  mela.computeP(ggzz_VAMCFM_NEW, useConstants);
7724 
7725  if (verbosity>=TVar::DEBUG) cout << "Computing p0plus_VAMCFM_NEW" << endl;
7726  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7727  //mela.setMelaLeptonInterference(TVar::InterfOff);
7728  mela.computeP(p0plus_VAMCFM_NEW, useConstants);
7729 
7730  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_p0plus_VAMCFM_NEW" << endl;
7732  //mela.setMelaLeptonInterference(TVar::InterfOff);
7733  mela.computeP(ggzz_p0plus_VAMCFM_NEW, useConstants);
7734 
7735  if (verbosity>=TVar::DEBUG) cout << "Computing p0plus_VAMCFM_NEW_BSMOn" << endl;
7736  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7737  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7738  mela.computeP(p0plus_VAMCFM_NEW_BSMOn, useConstants);
7739 
7741 
7742  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7743  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7744  mela.computeP(p0plus_VAJHU_NEW, useConstants);
7745 
7746  if (!useBkgSample){
7747  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7748  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
7749  mela.computeP(p0hplus_VAJHU_NEW, useConstants);
7750 
7751  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7752  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
7753  mela.computeP(p0minus_VAJHU_NEW, useConstants);
7754 
7755  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7756  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-12046.01;
7757  mela.computeP(p0_g1prime2_VAJHU_NEW, useConstants);
7758 
7759  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7760  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7761  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
7762  mela.computeP(pg1g2_VAJHU_NEW, useConstants);
7763  pg1g2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0hplus_VAJHU_NEW);
7764 
7765  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7766  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7767  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.638;
7768  mela.computeP(pg1g2_pi2_VAJHU_NEW, useConstants);
7769  pg1g2_pi2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0hplus_VAJHU_NEW);
7770 
7771  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7772  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7773  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
7774  mela.computeP(pg1g4_VAJHU_NEW, useConstants);
7775  pg1g4_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0minus_VAJHU_NEW);
7776 
7777  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7778  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7779  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=2.521;
7780  mela.computeP(pg1g4_pi2_VAJHU_NEW, useConstants);
7781  pg1g4_pi2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0minus_VAJHU_NEW);
7782 
7783  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7784  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7785  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=12046.01;
7786  mela.computeP(pg1g1prime2_VAJHU_NEW, useConstants);
7787  pg1g1prime2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0_g1prime2_VAJHU_NEW);
7788 
7789  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
7790  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7791  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][1]=12046.01;
7792  mela.computeP(pg1g1prime2_pi2_VAJHU_NEW, useConstants);
7793  pg1g1prime2_pi2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0_g1prime2_VAJHU_NEW);
7794 
7795 
7796  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
7797 
7798  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7799  mela.computeP(p0plus_VAMCFM_NEW, useConstants);
7800 
7801  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
7802  mela.computeP(p0hplus_VAMCFM_NEW, useConstants);
7803 
7804  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
7805  mela.computeP(p0minus_VAMCFM_NEW, useConstants);
7806 
7807  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-12046.01;
7808  mela.computeP(p0_g1prime2_VAMCFM_NEW, useConstants);
7809 
7810  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7811  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
7812  mela.computeP(pg1g2_VAMCFM_NEW, useConstants);
7813  pg1g2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0hplus_VAMCFM_NEW);
7814 
7815  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7816  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.638;
7817  mela.computeP(pg1g2_pi2_VAMCFM_NEW, useConstants);
7818  pg1g2_pi2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0hplus_VAMCFM_NEW);
7819 
7820  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7821  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
7822  mela.computeP(pg1g4_VAMCFM_NEW, useConstants);
7823  pg1g4_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0minus_VAMCFM_NEW);
7824 
7825  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7826  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=2.521;
7827  mela.computeP(pg1g4_pi2_VAMCFM_NEW, useConstants);
7828  pg1g4_pi2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0minus_VAMCFM_NEW);
7829 
7830  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7831  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=12046.01;
7832  mela.computeP(pg1g1prime2_VAMCFM_NEW, useConstants);
7833  pg1g1prime2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0_g1prime2_VAMCFM_NEW);
7834 
7835  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
7836  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][1]=12046.01;
7837  mela.computeP(pg1g1prime2_pi2_VAMCFM_NEW, useConstants);
7838  pg1g1prime2_pi2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0_g1prime2_VAMCFM_NEW);
7839  }
7840 
7841  p0hplus_VAJHU_ratio_NEW = p0hplus_VAJHU_NEW/p0plus_VAJHU_NEW;
7842  p0minus_VAJHU_ratio_NEW = p0minus_VAJHU_NEW/p0plus_VAJHU_NEW;
7843  p0_g1prime2_VAJHU_ratio_NEW = p0_g1prime2_VAJHU_NEW/p0plus_VAJHU_NEW;
7844  pg1g2_VAJHU_ratio_NEW = pg1g2_VAJHU_NEW/p0plus_VAJHU_NEW;
7845  pg1g4_VAJHU_ratio_NEW = pg1g4_VAJHU_NEW/p0plus_VAJHU_NEW;
7846  pg1g1prime2_VAJHU_ratio_NEW = pg1g1prime2_VAJHU_NEW/p0plus_VAJHU_NEW;
7847  pg1g2_pi2_VAJHU_ratio_NEW = pg1g2_pi2_VAJHU_NEW/p0plus_VAJHU_NEW;
7848  pg1g4_pi2_VAJHU_ratio_NEW = pg1g4_pi2_VAJHU_NEW/p0plus_VAJHU_NEW;
7849  pg1g1prime2_pi2_VAJHU_ratio_NEW = pg1g1prime2_pi2_VAJHU_NEW/p0plus_VAJHU_NEW;
7850 
7851  p0hplus_VAMCFM_ratio_NEW = p0hplus_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7852  p0minus_VAMCFM_ratio_NEW = p0minus_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7853  p0_g1prime2_VAMCFM_ratio_NEW = p0_g1prime2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7854  pg1g2_VAMCFM_ratio_NEW = pg1g2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7855  pg1g4_VAMCFM_ratio_NEW = pg1g4_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7856  pg1g1prime2_VAMCFM_ratio_NEW = pg1g1prime2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7857  pg1g2_pi2_VAMCFM_ratio_NEW = pg1g2_pi2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7858  pg1g4_pi2_VAMCFM_ratio_NEW = pg1g4_pi2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7859  pg1g1prime2_pi2_VAMCFM_ratio_NEW = pg1g1prime2_pi2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
7860 
7861 
7862  mela.resetInputEvent();
7863  newtree->Fill();
7864  }
7865 
7866 
7867  foutput->WriteTObject(newtree);
7868  foutput->Close();
7869  finput->Close();
7870  mela.setVerbosity(bkpverbosity);
7871 }
7872 
7873 void testME_ProdP_VBFHJJ_FullSim(int flavor=2, bool useConstants=false, bool useBkgSample=false, shared_ptr<Mela> melaptr=nullptr){
7874  int erg_tev=13;
7875  float mPOLE=125.6;
7876  float wPOLE=4.07e-3;
7877  TString TREE_NAME = "SelectedTree";
7878 
7879  TVar::VerbosityLevel verbosity = TVar::ERROR;
7880  if (!melaptr) {
7881  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
7882  }
7883  Mela& mela = *melaptr;
7884  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
7885  mela.setVerbosity(verbosity);
7886 
7887  TString cinput_main = "/scratch0/hep/ianderso/CJLST/140519/PRODFSR_8TeV";
7888  TFile* finput;
7889  TFile* foutput;
7890  if (useBkgSample){
7891  finput = new TFile(Form("%s/%s/HZZ4lTree_ZZTo%s.root", cinput_main.Data(), (flavor>=2 ? "2mu2e" : "4e"), (flavor==2 ? "2e2mu" : "4e")), "read");
7892  foutput = new TFile(Form("HZZ4lTree_ZZTo%s_vbfMELATest.root", (flavor>=2 ? "2e2mu" : "4e")), "recreate");
7893  }
7894  else{
7895  finput = new TFile(Form("%s/%s/HZZ4lTree_VBF0P_H125.6.root", cinput_main.Data(), (flavor==2 ? "2mu2e" : "4e")), "read");
7896  foutput = new TFile("HZZ4lTree_VBF0P_H125.6_vbfMELATest.root", "recreate");
7897  }
7898 
7899  float phjj_VAJHU_old;
7900  float pvbf_VAJHU_old;
7901  float phjj_VAJHU_old_NEW;
7902  float pvbf_VAJHU_old_NEW;
7903  float phjj_VAJHU_old_NEW_selfD;
7904  float pvbf_VAJHU_old_NEW_selfD;
7905  float phjj0minus_VAJHU_old_NEW;
7906  float pvbf0minus_VAJHU_old_NEW;
7907  float phjj0minus_VAJHU_old_NEW_selfD;
7908  float pvbf0minus_VAJHU_old_NEW_selfD;
7909 
7910  //float jet1Pt, jet2Pt;
7911  //float jet1px, jet1py, jet1pz, jet1E;
7912  //float jet2px, jet2py, jet2pz, jet2E;
7913  //float ZZPx, ZZPy, ZZPz, ZZE, dR;
7914  short NJets30;
7915  std::vector<double>* JetPt=0;
7916  std::vector<double>* JetEta=0;
7917  std::vector<double>* JetPhi=0;
7918  std::vector<double>* JetMass=0;
7919  std::vector<double> myJetPt;
7920  std::vector<double> myJetEta;
7921  std::vector<double> myJetPhi;
7922  std::vector<double> myJetMass;
7923  TBranch* bJetPt=0;
7924  TBranch* bJetEta=0;
7925  TBranch* bJetPhi=0;
7926  TBranch* bJetMass=0;
7927 
7928  float mzz = 126.;
7929  float m1 = 91.471450;
7930  float m2 = 12.139782;
7931  float h1 = 0.2682896;
7932  float h2 = 0.1679779;
7933  float phi = 1.5969792;
7934  float hs = -0.727181;
7935  float phi1 = 1.8828257;
7936  float ZZPt, ZZPhi, ZZEta;
7937 
7938  TTree* tree = (TTree*)finput->Get(TREE_NAME);
7939  tree->SetBranchAddress("NJets30", &NJets30);
7940  tree->SetBranchAddress("JetPt", &JetPt, &bJetPt);
7941  tree->SetBranchAddress("JetEta", &JetEta, &bJetEta);
7942  tree->SetBranchAddress("JetPhi", &JetPhi, &bJetPhi);
7943  tree->SetBranchAddress("JetMass", &JetMass, &bJetMass);
7944  tree->SetBranchAddress("phjj_VAJHU_old", &phjj_VAJHU_old);
7945  tree->SetBranchAddress("pvbf_VAJHU_old", &pvbf_VAJHU_old);
7946  tree->SetBranchAddress("ZZMass", &mzz);
7947  tree->SetBranchAddress("ZZPt", &ZZPt);
7948  tree->SetBranchAddress("ZZEta", &ZZEta);
7949  tree->SetBranchAddress("ZZPhi", &ZZPhi);
7950  tree->SetBranchAddress("Z1Mass", &m1);
7951  tree->SetBranchAddress("Z2Mass", &m2);
7952  tree->SetBranchAddress("helcosthetaZ1", &h1);
7953  tree->SetBranchAddress("helcosthetaZ2", &h2);
7954  tree->SetBranchAddress("helphi", &phi);
7955  tree->SetBranchAddress("costhetastar", &hs);
7956  tree->SetBranchAddress("phistarZ1", &phi1);
7957 
7958  TTree* newtree = new TTree("TestTree", "");
7959  newtree->Branch("phjj_VAJHU_old", &phjj_VAJHU_old);
7960  newtree->Branch("pvbf_VAJHU_old", &pvbf_VAJHU_old);
7961  newtree->Branch("phjj_VAJHU_old_NEW", &phjj_VAJHU_old_NEW);
7962  newtree->Branch("pvbf_VAJHU_old_NEW", &pvbf_VAJHU_old_NEW);
7963  newtree->Branch("phjj0minus_VAJHU_old_NEW", &phjj0minus_VAJHU_old_NEW);
7964  newtree->Branch("pvbf0minus_VAJHU_old_NEW", &pvbf0minus_VAJHU_old_NEW);
7965  newtree->Branch("phjj_VAJHU_old_NEW_selfD", &phjj_VAJHU_old_NEW_selfD);
7966  newtree->Branch("pvbf_VAJHU_old_NEW_selfD", &pvbf_VAJHU_old_NEW_selfD);
7967  newtree->Branch("phjj0minus_VAJHU_old_NEW_selfD", &phjj0minus_VAJHU_old_NEW_selfD);
7968  newtree->Branch("pvbf0minus_VAJHU_old_NEW_selfD", &pvbf0minus_VAJHU_old_NEW_selfD);
7969  newtree->Branch("ZZMass", &mzz);
7970 
7971  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
7972  if (flavor == 2){
7973  GenLep1Id=13;
7974  GenLep2Id=-13;
7975  GenLep3Id=11;
7976  GenLep4Id=-11;
7977  }
7978  else if (flavor == 1){
7979  GenLep1Id=11;
7980  GenLep2Id=-11;
7981  GenLep3Id=11;
7982  GenLep4Id=-11;
7983  }
7984  else if (flavor == 0){
7985  GenLep1Id=13;
7986  GenLep2Id=-13;
7987  GenLep3Id=13;
7988  GenLep4Id=-13;
7989  }
7990  else if (flavor == 3){
7991  GenLep1Id=14;
7992  GenLep2Id=-14;
7993  GenLep3Id=13;
7994  GenLep4Id=-13;
7995  }
7996  else if (flavor == 4){
7997  GenLep1Id=0;
7998  GenLep2Id=-0;
7999  GenLep3Id=1;
8000  GenLep4Id=-1;
8001  }
8002  else if (flavor == 5){
8003  GenLep1Id=1;
8004  GenLep2Id=-1;
8005  GenLep3Id=2;
8006  GenLep4Id=-2;
8007  }
8008  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
8009  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
8010 
8011  int nEntries = tree->GetEntries();
8012  int recorded=0;
8013  for (int ev = 0; ev < nEntries; ev++){
8014  if (recorded>=(verbosity>=TVar::DEBUG ? 1 : (!useBkgSample ? 1000 : nEntries))) break;
8015  tree->GetEntry(ev);
8016 
8017  if (JetPt->size()>=2 && NJets30>=2){
8018  TLorentzVector jet1(0, 0, 1e-3, 1e-3), jet2(0, 0, 1e-3, 1e-3), higgs(0, 0, 0, 0);
8019  jet1.SetPtEtaPhiM(JetPt->at(0), JetEta->at(0), JetPhi->at(0), JetMass->at(0));
8020  jet2.SetPtEtaPhiM(JetPt->at(1), JetEta->at(1), JetPhi->at(1), JetMass->at(1));
8021  higgs.SetPtEtaPhiM(ZZPt, ZZEta, ZZPhi, mzz);
8022  TVector3 boostH = higgs.BoostVector();
8023 
8025  associated.push_back(SimpleParticle_t(0, jet1));
8026  associated.push_back(SimpleParticle_t(0, jet2));
8027 
8028  TLorentzVector pDaughters[4];
8029  std::vector<TLorentzVector> daus = mela.calculate4Momentum(mzz, m1, m2, acos(hs), acos(h1), acos(h2), phi1, phi);
8030  for (int ip=0; ip<min(4, (int)daus.size()); ip++){ pDaughters[ip]=daus.at(ip); pDaughters[ip].Boost(boostH); }
8031  SimpleParticleCollection_t daughters_ZZ;
8032  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pDaughters[idau]));
8033  mela.setInputEvent(&daughters_ZZ, &associated, (SimpleParticleCollection_t*)0, false);
8034 
8035 
8037  mela.computeProdP(pvbf_VAJHU_old_NEW, useConstants);
8038 
8040  mela.computeProdP(phjj_VAJHU_old_NEW, useConstants);
8041  /*
8042  mela.setProcess(TVar::H0minus, TVar::JHUGen, TVar::JJVBF);
8043  mela.computeProdP(pvbf0minus_VAJHU_old_NEW, useConstants);
8044 
8045  mela.setProcess(TVar::H0minus, TVar::JHUGen, TVar::JJQCD);
8046  mela.computeProdP(phjj0minus_VAJHU_old_NEW, useConstants);
8047 
8048 
8049  mela.setProcess(TVar::SelfDefine_spin0, TVar::JHUGen, TVar::JJVBF);
8050  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8051  mela.computeProdP(pvbf_VAJHU_old_NEW_selfD, useConstants);
8052 
8053  mela.setProcess(TVar::SelfDefine_spin0, TVar::JHUGen, TVar::JJQCD);
8054  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8055  mela.computeProdP(phjj_VAJHU_old_NEW_selfD, useConstants);
8056 
8057 
8058  mela.setProcess(TVar::SelfDefine_spin0, TVar::JHUGen, TVar::JJVBF);
8059  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
8060  mela.computeProdP(pvbf0minus_VAJHU_old_NEW_selfD, useConstants);
8061 
8062  mela.setProcess(TVar::SelfDefine_spin0, TVar::JHUGen, TVar::JJQCD);
8063  mela.selfDHggcoupl[2][0]=1;
8064  mela.computeProdP(phjj0minus_VAJHU_old_NEW_selfD, useConstants);
8065  */
8066  newtree->Fill();
8067  recorded++;
8068  mela.resetInputEvent();
8069  }
8070  }
8071 
8072 
8073  foutput->WriteTObject(newtree);
8074  delete newtree;
8075  foutput->Close();
8076  finput->Close();
8077  mela.setVerbosity(bkpverbosity);
8078 }
8079 
8080 void testME_ProdP_VH_FullSim(shared_ptr<Mela> melaptr=nullptr){
8081  int erg_tev=8;
8082  float mPOLE=125.6;
8083  float wPOLE=4.07e-3;
8084  TString TREE_NAME = "SelectedTree";
8085 
8086  TVar::VerbosityLevel verbosity = TVar::DEBUG;
8087  if (!melaptr) {
8088  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
8089  }
8090  Mela& mela = *melaptr;
8091  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
8092  mela.setVerbosity(verbosity);
8093 
8094  TString cinput_main = "/scratch0/hep/ianderso/CJLST/140519/PRODFSR_8TeV";
8095  TFile* finput = new TFile(Form("%s/%s/HZZ4lTree_ZZTo%s.root", cinput_main.Data(), "2mu2e", "2e2mu"), "read");
8096  TFile* foutput = new TFile(Form("HZZ4lTree_ZZTo%s_vhMELATest.root", "2e2mu"), "recreate");
8097 
8098  float pwh_leptonic_VAJHU_old_NEW;
8099  float pzh_leptonic_VAJHU_old_NEW;
8100  float pwh_leptonic_VAJHU_old_NEW_selfD;
8101  float pzh_leptonic_VAJHU_old_NEW_selfD;
8102  float pwh0minus_leptonic_VAJHU_old_NEW;
8103  float pzh0minus_leptonic_VAJHU_old_NEW;
8104  float pwh0minus_leptonic_VAJHU_old_NEW_selfD;
8105  float pzh0minus_leptonic_VAJHU_old_NEW_selfD;
8106  float pwh_hadronic_VAJHU_old_NEW;
8107  float pzh_hadronic_VAJHU_old_NEW;
8108  float pwh_hadronic_VAJHU_old_NEW_selfD;
8109  float pzh_hadronic_VAJHU_old_NEW_selfD;
8110  float pwh0minus_hadronic_VAJHU_old_NEW;
8111  float pzh0minus_hadronic_VAJHU_old_NEW;
8112  float pwh0minus_hadronic_VAJHU_old_NEW_selfD;
8113  float pzh0minus_hadronic_VAJHU_old_NEW_selfD;
8114 
8115  //float jet1Pt, jet2Pt;
8116  //float jet1px, jet1py, jet1pz, jet1E;
8117  //float jet2px, jet2py, jet2pz, jet2E;
8118  //float ZZPx, ZZPy, ZZPz, ZZE, dR;
8119  short NJets30;
8120  std::vector<double>* JetPt=0;
8121  std::vector<double>* JetEta=0;
8122  std::vector<double>* JetPhi=0;
8123  std::vector<double>* JetMass=0;
8124  std::vector<double> myJetPt;
8125  std::vector<double> myJetEta;
8126  std::vector<double> myJetPhi;
8127  std::vector<double> myJetMass;
8128  TBranch* bJetPt=0;
8129  TBranch* bJetEta=0;
8130  TBranch* bJetPhi=0;
8131  TBranch* bJetMass=0;
8132 
8133  float mzz = 126.;
8134  float m1 = 91.471450;
8135  float m2 = 12.139782;
8136  float h1 = 0.2682896;
8137  float h2 = 0.1679779;
8138  float phi = 1.5969792;
8139  float hs = -0.727181;
8140  float phi1 = 1.8828257;
8141  float ZZPt, ZZPhi, ZZEta;
8142 
8143  TTree* tree = (TTree*)finput->Get(TREE_NAME);
8144  tree->SetBranchAddress("NJets30", &NJets30);
8145  tree->SetBranchAddress("JetPt", &JetPt, &bJetPt);
8146  tree->SetBranchAddress("JetEta", &JetEta, &bJetEta);
8147  tree->SetBranchAddress("JetPhi", &JetPhi, &bJetPhi);
8148  tree->SetBranchAddress("JetMass", &JetMass, &bJetMass);
8149  tree->SetBranchAddress("ZZMass", &mzz);
8150  tree->SetBranchAddress("ZZPt", &ZZPt);
8151  tree->SetBranchAddress("ZZEta", &ZZEta);
8152  tree->SetBranchAddress("ZZPhi", &ZZPhi);
8153  tree->SetBranchAddress("Z1Mass", &m1);
8154  tree->SetBranchAddress("Z2Mass", &m2);
8155  tree->SetBranchAddress("helcosthetaZ1", &h1);
8156  tree->SetBranchAddress("helcosthetaZ2", &h2);
8157  tree->SetBranchAddress("helphi", &phi);
8158  tree->SetBranchAddress("costhetastar", &hs);
8159  tree->SetBranchAddress("phistarZ1", &phi1);
8160 
8161  TTree* newtree = new TTree("TestTree", "");
8162  newtree->Branch("pwh_leptonic_VAJHU_old_NEW", &pwh_leptonic_VAJHU_old_NEW);
8163  newtree->Branch("pzh_leptonic_VAJHU_old_NEW", &pzh_leptonic_VAJHU_old_NEW);
8164  newtree->Branch("pwh0minus_leptonic_VAJHU_old_NEW", &pwh0minus_leptonic_VAJHU_old_NEW);
8165  newtree->Branch("pzh0minus_leptonic_VAJHU_old_NEW", &pzh0minus_leptonic_VAJHU_old_NEW);
8166  newtree->Branch("pwh_leptonic_VAJHU_old_NEW_selfD", &pwh_leptonic_VAJHU_old_NEW_selfD);
8167  newtree->Branch("pzh_leptonic_VAJHU_old_NEW_selfD", &pzh_leptonic_VAJHU_old_NEW_selfD);
8168  newtree->Branch("pwh0minus_leptonic_VAJHU_old_NEW_selfD", &pwh0minus_leptonic_VAJHU_old_NEW_selfD);
8169  newtree->Branch("pzh0minus_leptonic_VAJHU_old_NEW_selfD", &pzh0minus_leptonic_VAJHU_old_NEW_selfD);
8170  newtree->Branch("pwh_hadronic_VAJHU_old_NEW", &pwh_hadronic_VAJHU_old_NEW);
8171  newtree->Branch("pzh_hadronic_VAJHU_old_NEW", &pzh_hadronic_VAJHU_old_NEW);
8172  newtree->Branch("pwh0minus_hadronic_VAJHU_old_NEW", &pwh0minus_hadronic_VAJHU_old_NEW);
8173  newtree->Branch("pzh0minus_hadronic_VAJHU_old_NEW", &pzh0minus_hadronic_VAJHU_old_NEW);
8174  newtree->Branch("pwh_hadronic_VAJHU_old_NEW_selfD", &pwh_hadronic_VAJHU_old_NEW_selfD);
8175  newtree->Branch("pzh_hadronic_VAJHU_old_NEW_selfD", &pzh_hadronic_VAJHU_old_NEW_selfD);
8176  newtree->Branch("pwh0minus_hadronic_VAJHU_old_NEW_selfD", &pwh0minus_hadronic_VAJHU_old_NEW_selfD);
8177  newtree->Branch("pzh0minus_hadronic_VAJHU_old_NEW_selfD", &pzh0minus_hadronic_VAJHU_old_NEW_selfD);
8178  newtree->Branch("ZZMass", &mzz);
8179 
8180  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
8181  GenLep1Id=13;
8182  GenLep2Id=-13;
8183  GenLep3Id=14;
8184  GenLep4Id=-14;
8185  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
8186  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
8187 
8188  int nEntries = tree->GetEntries();
8189  int recorded=0;
8190  for (int ev = 0; ev < nEntries; ev++){
8191  if (recorded>=(verbosity>=TVar::DEBUG ? 1 : 1000)) break;
8192  tree->GetEntry(ev);
8193 
8194  if (JetPt->size()>=2 && NJets30>=2){
8195  TLorentzVector jet1(0, 0, 1e-3, 1e-3), jet2(0, 0, 1e-3, 1e-3), higgs(0, 0, 0, 0);
8196  jet1.SetPtEtaPhiM(JetPt->at(0), JetEta->at(0), JetPhi->at(0), JetMass->at(0));
8197  jet2.SetPtEtaPhiM(JetPt->at(1), JetEta->at(1), JetPhi->at(1), JetMass->at(1));
8198  higgs.SetPtEtaPhiM(ZZPt, ZZEta, ZZPhi, mzz);
8199  TVector3 boostH = higgs.BoostVector();
8200 
8201  TLorentzVector pDaughters[4];
8202  std::vector<TLorentzVector> daus = mela.calculate4Momentum(mzz, m1, m2, acos(hs), acos(h1), acos(h2), phi1, phi);
8203  for (int ip=0; ip<min(4, (int)daus.size()); ip++){ pDaughters[ip]=daus.at(ip); pDaughters[ip].Boost(boostH); }
8204 
8206  associated.push_back(SimpleParticle_t(0, jet1));
8207  associated.push_back(SimpleParticle_t(0, jet2));
8208  for (unsigned int idau=0; idau<4; idau++) associated.push_back(SimpleParticle_t(idOrdered[idau], pDaughters[idau])); // Let's put some extra leptons
8209 
8210  SimpleParticleCollection_t daughters_ZZ;
8211  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pDaughters[idau]));
8212  mela.setInputEvent(&daughters_ZZ, &associated, (SimpleParticleCollection_t*)0, false);
8213 
8214  if (verbosity>=TVar::DEBUG){
8215  cout << "Mela candidates summary:" << endl;
8216  for (int ic=0; ic<mela.getNCandidates(); ic++){
8217  cout << "Candidate " << ic << endl;
8218  mela.setCurrentCandidateFromIndex(ic);
8219  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
8220  }
8221  cout << endl;
8222  }
8223 
8225  mela.computeProdP_VH(pzh_leptonic_VAJHU_old_NEW, false, false);
8226 
8228  mela.computeProdP_VH(pwh_leptonic_VAJHU_old_NEW, false, false);
8229 
8231  mela.computeProdP_VH(pzh0minus_leptonic_VAJHU_old_NEW, false, false);
8232 
8234  mela.computeProdP_VH(pwh0minus_leptonic_VAJHU_old_NEW, false, false);
8235 
8236 
8238  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8239  mela.computeProdP_VH(pzh_leptonic_VAJHU_old_NEW_selfD, false, false);
8240 
8242  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8243  mela.computeProdP_VH(pwh_leptonic_VAJHU_old_NEW_selfD, false, false);
8244 
8245 
8247  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
8248  mela.computeProdP_VH(pzh0minus_leptonic_VAJHU_old_NEW_selfD, false, false);
8249 
8251  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
8252  mela.computeProdP_VH(pwh0minus_leptonic_VAJHU_old_NEW_selfD, false, false);
8253 
8255  mela.computeProdP_VH(pzh_hadronic_VAJHU_old_NEW, false, false);
8256 
8258  mela.computeProdP_VH(pwh_hadronic_VAJHU_old_NEW, false, false);
8259 
8261  mela.computeProdP_VH(pzh0minus_hadronic_VAJHU_old_NEW, false, false);
8262 
8264  mela.computeProdP_VH(pwh0minus_hadronic_VAJHU_old_NEW, false, false);
8265 
8266 
8268  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8269  mela.computeProdP_VH(pzh_hadronic_VAJHU_old_NEW_selfD, false, false);
8270 
8272  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8273  mela.computeProdP_VH(pwh_hadronic_VAJHU_old_NEW_selfD, false, false);
8274 
8275 
8277  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
8278  mela.computeProdP_VH(pzh0minus_hadronic_VAJHU_old_NEW_selfD, false, false);
8279 
8281  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=1;
8282  mela.computeProdP_VH(pwh0minus_hadronic_VAJHU_old_NEW_selfD, false, false);
8283 
8284  newtree->Fill();
8285  recorded++;
8286  mela.resetInputEvent();
8287  }
8288  }
8289 
8290 
8291  foutput->WriteTObject(newtree);
8292  delete newtree;
8293  foutput->Close();
8294  finput->Close();
8295  mela.setVerbosity(bkpverbosity);
8296 }
8297 
8298 void testME_ProdP_TTHBBH_FullSim(shared_ptr<Mela> melaptr=nullptr){
8299  int erg_tev=8;
8300  float mPOLE=125.6;
8301  float wPOLE=4.07e-3;
8302  TString TREE_NAME = "SelectedTree";
8303 
8304  TVar::VerbosityLevel verbosity = TVar::ERROR;
8305  if (!melaptr) {
8306  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
8307  }
8308  Mela& mela = *melaptr;
8309  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
8310  mela.setVerbosity(verbosity);
8311 
8312  TString cinput_main = "/scratch0/hep/ianderso/CJLST/140519/PRODFSR_8TeV";
8313  TFile* finput = new TFile(Form("%s/%s/HZZ4lTree_ZZTo%s.root", cinput_main.Data(), "2mu2e", "2e2mu"), "read");
8314  TFile* foutput = new TFile(Form("HZZ4lTree_ZZTo%s_ttHbbHMELATest.root", "2e2mu"), "recreate");
8315 
8316  float pbbh_VAJHU_old_NEW;
8317  float ptth_VAJHU_old_NEW;
8318  float pbbh_VAJHU_old_NEW_selfD;
8319  float ptth_VAJHU_old_NEW_selfD;
8320  float pbbh0minus_VAJHU_old_NEW;
8321  float ptth0minus_VAJHU_old_NEW;
8322  float pbbh0minus_VAJHU_old_NEW_selfD;
8323  float ptth0minus_VAJHU_old_NEW_selfD;
8324 
8325  short NJets30;
8326  std::vector<double>* JetPt=0;
8327  std::vector<double>* JetEta=0;
8328  std::vector<double>* JetPhi=0;
8329  std::vector<double>* JetMass=0;
8330  std::vector<double> myJetPt;
8331  std::vector<double> myJetEta;
8332  std::vector<double> myJetPhi;
8333  std::vector<double> myJetMass;
8334  TBranch* bJetPt=0;
8335  TBranch* bJetEta=0;
8336  TBranch* bJetPhi=0;
8337  TBranch* bJetMass=0;
8338 
8339  float mzz = 126.;
8340  float m1 = 91.471450;
8341  float m2 = 12.139782;
8342  float h1 = 0.2682896;
8343  float h2 = 0.1679779;
8344  float phi = 1.5969792;
8345  float hs = -0.727181;
8346  float phi1 = 1.8828257;
8347  float ZZPt, ZZPhi, ZZEta;
8348 
8349  TTree* tree = (TTree*)finput->Get(TREE_NAME);
8350  tree->SetBranchAddress("NJets30", &NJets30);
8351  tree->SetBranchAddress("JetPt", &JetPt, &bJetPt);
8352  tree->SetBranchAddress("JetEta", &JetEta, &bJetEta);
8353  tree->SetBranchAddress("JetPhi", &JetPhi, &bJetPhi);
8354  tree->SetBranchAddress("JetMass", &JetMass, &bJetMass);
8355  tree->SetBranchAddress("ZZMass", &mzz);
8356  tree->SetBranchAddress("ZZPt", &ZZPt);
8357  tree->SetBranchAddress("ZZEta", &ZZEta);
8358  tree->SetBranchAddress("ZZPhi", &ZZPhi);
8359  tree->SetBranchAddress("Z1Mass", &m1);
8360  tree->SetBranchAddress("Z2Mass", &m2);
8361  tree->SetBranchAddress("helcosthetaZ1", &h1);
8362  tree->SetBranchAddress("helcosthetaZ2", &h2);
8363  tree->SetBranchAddress("helphi", &phi);
8364  tree->SetBranchAddress("costhetastar", &hs);
8365  tree->SetBranchAddress("phistarZ1", &phi1);
8366 
8367  TTree* newtree = new TTree("TestTree", "");
8368  newtree->Branch("pbbh_VAJHU_old_NEW", &pbbh_VAJHU_old_NEW);
8369  newtree->Branch("ptth_VAJHU_old_NEW", &ptth_VAJHU_old_NEW);
8370  newtree->Branch("pbbh0minus_VAJHU_old_NEW", &pbbh0minus_VAJHU_old_NEW);
8371  newtree->Branch("ptth0minus_VAJHU_old_NEW", &ptth0minus_VAJHU_old_NEW);
8372  newtree->Branch("pbbh_VAJHU_old_NEW_selfD", &pbbh_VAJHU_old_NEW_selfD);
8373  newtree->Branch("ptth_VAJHU_old_NEW_selfD", &ptth_VAJHU_old_NEW_selfD);
8374  newtree->Branch("pbbh0minus_VAJHU_old_NEW_selfD", &pbbh0minus_VAJHU_old_NEW_selfD);
8375  newtree->Branch("ptth0minus_VAJHU_old_NEW_selfD", &ptth0minus_VAJHU_old_NEW_selfD);
8376  newtree->Branch("ZZMass", &mzz);
8377 
8378  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
8379  GenLep1Id=13;
8380  GenLep2Id=-13;
8381  GenLep3Id=11;
8382  GenLep4Id=-11;
8383  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
8384  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
8385 
8386  int nEntries = tree->GetEntries();
8387  int recorded=0;
8388  for (int ev = 0; ev < nEntries; ev++){
8389  if (recorded>=1000) break;
8390  tree->GetEntry(ev);
8391 
8392  if (JetPt->size()>=2 && NJets30>=2){
8393  TLorentzVector jet1(0, 0, 1e-3, 1e-3), jet2(0, 0, 1e-3, 1e-3), higgs(0, 0, 0, 0);
8394  jet1.SetPtEtaPhiM(JetPt->at(0), JetEta->at(0), JetPhi->at(0), JetMass->at(0));
8395  jet2.SetPtEtaPhiM(JetPt->at(1), JetEta->at(1), JetPhi->at(1), JetMass->at(1));
8396  higgs.SetPtEtaPhiM(ZZPt, ZZEta, ZZPhi, mzz);
8397  TVector3 boostH = higgs.BoostVector();
8398 
8400  associated.push_back(SimpleParticle_t(0, jet1));
8401  associated.push_back(SimpleParticle_t(0, jet2));
8402 
8403  TLorentzVector pDaughters[4];
8404  std::vector<TLorentzVector> daus = mela.calculate4Momentum(mzz, m1, m2, acos(hs), acos(h1), acos(h2), phi1, phi);
8405  for (int ip=0; ip<min(4, (int)daus.size()); ip++){ pDaughters[ip]=daus.at(ip); pDaughters[ip].Boost(boostH); }
8407  for (unsigned int idau=0; idau<4; idau++) daughters.push_back(SimpleParticle_t(idOrdered[idau], pDaughters[idau]));
8408  mela.setInputEvent(&daughters, &associated, (SimpleParticleCollection_t*)0, false);
8409 
8410  // This is some hack to get top daughter four-vectors
8411  SimpleParticleCollection_t topDaughters;
8412  topDaughters.push_back(SimpleParticle_t(0, jet1));
8413  for (unsigned int idau=0; idau<2; idau++) topDaughters.push_back(SimpleParticle_t(0, pDaughters[idau]));
8414  mela.appendTopCandidate(&topDaughters);
8415  SimpleParticleCollection_t antitopDaughters;
8416  antitopDaughters.push_back(SimpleParticle_t(0, jet2));
8417  for (unsigned int idau=2; idau<4; idau++) antitopDaughters.push_back(SimpleParticle_t(0, pDaughters[idau]));
8418  mela.appendTopCandidate(&antitopDaughters);
8419 
8420  if (verbosity>=TVar::DEBUG){
8421  cout << "Mela candidates summary:" << endl;
8422  for (int ic=0; ic<mela.getNCandidates(); ic++){
8423  cout << "Candidate " << ic << endl;
8424  mela.setCurrentCandidateFromIndex(ic);
8425  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
8426  }
8427  cout << endl;
8428  }
8429 
8430  mela.setProcess(TVar::HSMHiggs, TVar::JHUGen, TVar::ttH);
8431  mela.computeProdP_ttH(ptth_VAJHU_old_NEW, 2, 0, false);
8432 
8433  mela.setProcess(TVar::HSMHiggs, TVar::JHUGen, TVar::bbH);
8434  mela.computeProdP_ttH(pbbh_VAJHU_old_NEW, 2, 0, false);
8435 
8436  mela.setProcess(TVar::H0minus, TVar::JHUGen, TVar::ttH);
8437  mela.computeProdP_ttH(ptth0minus_VAJHU_old_NEW, 2, 0, false);
8438 
8439  mela.setProcess(TVar::H0minus, TVar::JHUGen, TVar::bbH);
8440  mela.computeProdP_ttH(pbbh0minus_VAJHU_old_NEW, 2, 0, false);
8441 
8442 
8444  mela.selfDHqqcoupl[0][gHIGGS_KAPPA][0]=1;
8445  mela.computeProdP_ttH(ptth_VAJHU_old_NEW_selfD, 2, 0, false);
8446 
8448  mela.selfDHqqcoupl[0][gHIGGS_KAPPA][0]=1;
8449  mela.computeProdP_ttH(pbbh_VAJHU_old_NEW_selfD, 2, 0, false);
8450 
8452  mela.selfDHqqcoupl[0][gHIGGS_KAPPA_TILDE][0]=1;
8453  mela.computeProdP_ttH(ptth0minus_VAJHU_old_NEW_selfD, 2, 0, false);
8454 
8456  mela.selfDHqqcoupl[0][gHIGGS_KAPPA_TILDE][0]=1;
8457  mela.computeProdP_ttH(pbbh0minus_VAJHU_old_NEW_selfD, 2, 0, false);
8458 
8459  newtree->Fill();
8460  recorded++;
8461  mela.resetInputEvent();
8462  }
8463  }
8464 
8465 
8466  foutput->WriteTObject(newtree);
8467  delete newtree;
8468  foutput->Close();
8469  finput->Close();
8470  mela.setVerbosity(bkpverbosity);
8471 }
8472 
8473 
8474 void testME_Dec_ZZWWComparison_FullSim(shared_ptr<Mela> melaptr=nullptr){
8475  int erg_tev=8;
8476  float mPOLE=125.;
8477  float wPOLE=4.07e-3;
8478  TString TREE_NAME = "SelectedTree";
8479 
8480  TVar::VerbosityLevel verbosity = TVar::ERROR;
8481  if (!melaptr) {
8482  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
8483  }
8484  Mela& mela = *melaptr;
8485  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
8486  mela.setVerbosity(verbosity);
8487  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
8488  mela.resetMCFM_EWKParameters(1.16639E-05, 1./128., 80.399, 91.1876, 0.23119);
8489 
8490  TString cinput_main = "/scratch0/hep/ianderso/CJLST/140519/PRODFSR_8TeV";
8491  TFile* finput = new TFile(Form("%s/%s/HZZ4lTree_powheg15jhuGenV3-0PMH125.6.root", cinput_main.Data(), "2mu2e"), "read");
8492  TFile* foutput = new TFile(Form("HZZ4lTree_powheg15jhuGenV3-0PMH125.6_%s_ZZWWComparison.root", "2l2nu"), "recreate");
8493 
8494  float p0plus_VAJHU_NEW;
8495  float p0hplus_VAJHU_NEW;
8496  float p0minus_VAJHU_NEW;
8497  float p0_g1prime2_VAJHU_NEW;
8498  float pg1g1prime2_VAJHU_NEW;
8499  float pg1g1prime2_pi2_VAJHU_NEW;
8500  float pg1g2_VAJHU_NEW;
8501  float pg1g2_pi2_VAJHU_NEW;
8502  float pg1g4_VAJHU_NEW;
8503  float pg1g4_pi2_VAJHU_NEW;
8504 
8505  float p0hplus_VAMCFM_NEW;
8506  float p0minus_VAMCFM_NEW;
8507  float p0_g1prime2_VAMCFM_NEW;
8508  float pg1g1prime2_VAMCFM_NEW;
8509  float pg1g1prime2_pi2_VAMCFM_NEW;
8510  float pg1g2_VAMCFM_NEW;
8511  float pg1g2_pi2_VAMCFM_NEW;
8512  float pg1g4_VAMCFM_NEW;
8513  float pg1g4_pi2_VAMCFM_NEW;
8514 
8515  float p0hplus_VAMCFM_ratio_NEW;
8516  float p0minus_VAMCFM_ratio_NEW;
8517  float p0_g1prime2_VAMCFM_ratio_NEW;
8518  float pg1g1prime2_VAMCFM_ratio_NEW;
8519  float pg1g1prime2_pi2_VAMCFM_ratio_NEW;
8520  float pg1g2_VAMCFM_ratio_NEW;
8521  float pg1g2_pi2_VAMCFM_ratio_NEW;
8522  float pg1g4_VAMCFM_ratio_NEW;
8523  float pg1g4_pi2_VAMCFM_ratio_NEW;
8524 
8525  float p0hplus_VAJHU_ratio_NEW;
8526  float p0minus_VAJHU_ratio_NEW;
8527  float p0_g1prime2_VAJHU_ratio_NEW;
8528  float pg1g1prime2_VAJHU_ratio_NEW;
8529  float pg1g1prime2_pi2_VAJHU_ratio_NEW;
8530  float pg1g2_VAJHU_ratio_NEW;
8531  float pg1g2_pi2_VAJHU_ratio_NEW;
8532  float pg1g4_VAJHU_ratio_NEW;
8533  float pg1g4_pi2_VAJHU_ratio_NEW;
8534 
8535  float p0plus_VAMCFM_NEW, ggzz_p0plus_VAMCFM_NEW, p0plus_VAMCFM_NEW_BSMOn, ggzz_p0plus_VAMCFM_NEW_BSMOn;
8536  float bkg_VAMCFM_NEW, ggzz_VAMCFM_NEW;
8537 
8538  float p0plus_WW_VAJHU_NEW;
8539  float p0hplus_WW_VAJHU_NEW;
8540  float p0minus_WW_VAJHU_NEW;
8541  float p0_g1prime2_WW_VAJHU_NEW;
8542  float pg1g1prime2_WW_VAJHU_NEW;
8543  float pg1g1prime2_pi2_WW_VAJHU_NEW;
8544  float pg1g2_WW_VAJHU_NEW;
8545  float pg1g2_pi2_WW_VAJHU_NEW;
8546  float pg1g4_WW_VAJHU_NEW;
8547  float pg1g4_pi2_WW_VAJHU_NEW;
8548 
8549  float p0hplus_WW_VAMCFM_NEW;
8550  float p0minus_WW_VAMCFM_NEW;
8551  float p0_g1prime2_WW_VAMCFM_NEW;
8552  float pg1g1prime2_WW_VAMCFM_NEW;
8553  float pg1g1prime2_pi2_WW_VAMCFM_NEW;
8554  float pg1g2_WW_VAMCFM_NEW;
8555  float pg1g2_pi2_WW_VAMCFM_NEW;
8556  float pg1g4_WW_VAMCFM_NEW;
8557  float pg1g4_pi2_WW_VAMCFM_NEW;
8558 
8559  float p0hplus_WW_VAMCFM_ratio_NEW;
8560  float p0minus_WW_VAMCFM_ratio_NEW;
8561  float p0_g1prime2_WW_VAMCFM_ratio_NEW;
8562  float pg1g1prime2_WW_VAMCFM_ratio_NEW;
8563  float pg1g1prime2_pi2_WW_VAMCFM_ratio_NEW;
8564  float pg1g2_WW_VAMCFM_ratio_NEW;
8565  float pg1g2_pi2_WW_VAMCFM_ratio_NEW;
8566  float pg1g4_WW_VAMCFM_ratio_NEW;
8567  float pg1g4_pi2_WW_VAMCFM_ratio_NEW;
8568 
8569  float p0hplus_WW_VAJHU_ratio_NEW;
8570  float p0minus_WW_VAJHU_ratio_NEW;
8571  float p0_g1prime2_WW_VAJHU_ratio_NEW;
8572  float pg1g1prime2_WW_VAJHU_ratio_NEW;
8573  float pg1g1prime2_pi2_WW_VAJHU_ratio_NEW;
8574  float pg1g2_WW_VAJHU_ratio_NEW;
8575  float pg1g2_pi2_WW_VAJHU_ratio_NEW;
8576  float pg1g4_WW_VAJHU_ratio_NEW;
8577  float pg1g4_pi2_WW_VAJHU_ratio_NEW;
8578 
8579  float p0plus_WW_VAMCFM_NEW, ggzz_p0plus_WW_VAMCFM_NEW, p0plus_WW_VAMCFM_NEW_BSMOn, ggzz_p0plus_WW_VAMCFM_NEW_BSMOn;
8580  float bkg_WW_VAMCFM_NEW, ggzz_WW_VAMCFM_NEW;
8581 
8582  float mzz = 126.;
8583  float m1 = 91.471450;
8584  float m2 = 12.139782;
8585  float h1 = 0.2682896;
8586  float h2 = 0.1679779;
8587  float phi = 1.5969792;
8588  float hs = -0.727181;
8589  float phi1 = 1.8828257;
8590 
8591  TTree* tree = (TTree*)finput->Get(TREE_NAME);
8592  tree->SetBranchAddress("ZZMass", &mzz);
8593  tree->SetBranchAddress("Z1Mass", &m1);
8594  tree->SetBranchAddress("Z2Mass", &m2);
8595  tree->SetBranchAddress("helcosthetaZ1", &h1);
8596  tree->SetBranchAddress("helcosthetaZ2", &h2);
8597  tree->SetBranchAddress("helphi", &phi);
8598  tree->SetBranchAddress("costhetastar", &hs);
8599  tree->SetBranchAddress("phistarZ1", &phi1);
8600 
8601  TTree* newtree = new TTree("TestTree", "");
8602  newtree->Branch("ZZMass", &mzz);
8603  newtree->Branch("Z1Mass", &m1);
8604  newtree->Branch("Z2Mass", &m2);
8605  newtree->Branch("helcosthetaZ1", &h1);
8606  newtree->Branch("helcosthetaZ2", &h2);
8607  newtree->Branch("helphi", &phi);
8608  newtree->Branch("costhetastar", &hs);
8609  newtree->Branch("phistarZ1", &phi1);
8610 
8611  newtree->Branch("p0plus_VAJHU_NEW", &p0plus_VAJHU_NEW);
8612  newtree->Branch("p0hplus_VAJHU_NEW", &p0hplus_VAJHU_NEW);
8613  newtree->Branch("p0minus_VAJHU_NEW", &p0minus_VAJHU_NEW);
8614  newtree->Branch("p0_g1prime2_VAJHU_NEW", &p0_g1prime2_VAJHU_NEW);
8615  newtree->Branch("pg1g2_VAJHU_NEW", &pg1g2_VAJHU_NEW);
8616  newtree->Branch("pg1g2_pi2_VAJHU_NEW", &pg1g2_pi2_VAJHU_NEW);
8617  newtree->Branch("pg1g4_VAJHU_NEW", &pg1g4_VAJHU_NEW);
8618  newtree->Branch("pg1g4_pi2_VAJHU_NEW", &pg1g4_pi2_VAJHU_NEW);
8619  newtree->Branch("pg1g1prime2_VAJHU_NEW", &pg1g1prime2_VAJHU_NEW);
8620  newtree->Branch("pg1g1prime2_pi2_VAJHU_NEW", &pg1g1prime2_pi2_VAJHU_NEW);
8621 
8622  newtree->Branch("bkg_VAMCFM_NEW", &bkg_VAMCFM_NEW);
8623  newtree->Branch("ggzz_VAMCFM_NEW", &ggzz_VAMCFM_NEW);
8624  newtree->Branch("p0plus_VAMCFM_NEW", &p0plus_VAMCFM_NEW);
8625  newtree->Branch("ggzz_p0plus_VAMCFM_NEW", &ggzz_p0plus_VAMCFM_NEW);
8626  newtree->Branch("p0plus_VAMCFM_NEW_BSMOn", &p0plus_VAMCFM_NEW_BSMOn);
8627  newtree->Branch("ggzz_p0plus_VAMCFM_NEW_BSMOn", &ggzz_p0plus_VAMCFM_NEW_BSMOn);
8628 
8629  newtree->Branch("p0hplus_VAMCFM_NEW", &p0hplus_VAMCFM_NEW);
8630  newtree->Branch("p0minus_VAMCFM_NEW", &p0minus_VAMCFM_NEW);
8631  newtree->Branch("p0_g1prime2_VAMCFM_NEW", &p0_g1prime2_VAMCFM_NEW);
8632  newtree->Branch("pg1g2_VAMCFM_NEW", &pg1g2_VAMCFM_NEW);
8633  newtree->Branch("pg1g2_pi2_VAMCFM_NEW", &pg1g2_pi2_VAMCFM_NEW);
8634  newtree->Branch("pg1g4_VAMCFM_NEW", &pg1g4_VAMCFM_NEW);
8635  newtree->Branch("pg1g4_pi2_VAMCFM_NEW", &pg1g4_pi2_VAMCFM_NEW);
8636  newtree->Branch("pg1g1prime2_VAMCFM_NEW", &pg1g1prime2_VAMCFM_NEW);
8637  newtree->Branch("pg1g1prime2_pi2_VAMCFM_NEW", &pg1g1prime2_pi2_VAMCFM_NEW);
8638 
8639  newtree->Branch("p0hplus_VAMCFM_ratio_NEW", &p0hplus_VAMCFM_ratio_NEW);
8640  newtree->Branch("p0minus_VAMCFM_ratio_NEW", &p0minus_VAMCFM_ratio_NEW);
8641  newtree->Branch("p0_g1prime2_VAMCFM_ratio_NEW", &p0_g1prime2_VAMCFM_ratio_NEW);
8642  newtree->Branch("pg1g2_VAMCFM_ratio_NEW", &pg1g2_VAMCFM_ratio_NEW);
8643  newtree->Branch("pg1g2_pi2_VAMCFM_ratio_NEW", &pg1g2_pi2_VAMCFM_ratio_NEW);
8644  newtree->Branch("pg1g4_VAMCFM_ratio_NEW", &pg1g4_VAMCFM_ratio_NEW);
8645  newtree->Branch("pg1g4_pi2_VAMCFM_ratio_NEW", &pg1g4_pi2_VAMCFM_ratio_NEW);
8646  newtree->Branch("pg1g1prime2_VAMCFM_ratio_NEW", &pg1g1prime2_VAMCFM_ratio_NEW);
8647  newtree->Branch("pg1g1prime2_pi2_VAMCFM_ratio_NEW", &pg1g1prime2_pi2_VAMCFM_ratio_NEW);
8648 
8649  newtree->Branch("p0hplus_VAJHU_ratio_NEW", &p0hplus_VAJHU_ratio_NEW);
8650  newtree->Branch("p0minus_VAJHU_ratio_NEW", &p0minus_VAJHU_ratio_NEW);
8651  newtree->Branch("p0_g1prime2_VAJHU_ratio_NEW", &p0_g1prime2_VAJHU_ratio_NEW);
8652  newtree->Branch("pg1g2_VAJHU_ratio_NEW", &pg1g2_VAJHU_ratio_NEW);
8653  newtree->Branch("pg1g2_pi2_VAJHU_ratio_NEW", &pg1g2_pi2_VAJHU_ratio_NEW);
8654  newtree->Branch("pg1g4_VAJHU_ratio_NEW", &pg1g4_VAJHU_ratio_NEW);
8655  newtree->Branch("pg1g4_pi2_VAJHU_ratio_NEW", &pg1g4_pi2_VAJHU_ratio_NEW);
8656  newtree->Branch("pg1g1prime2_VAJHU_ratio_NEW", &pg1g1prime2_VAJHU_ratio_NEW);
8657  newtree->Branch("pg1g1prime2_pi2_VAJHU_ratio_NEW", &pg1g1prime2_pi2_VAJHU_ratio_NEW);
8658 
8659  newtree->Branch("p0plus_WW_VAJHU_NEW", &p0plus_WW_VAJHU_NEW);
8660  newtree->Branch("p0hplus_WW_VAJHU_NEW", &p0hplus_WW_VAJHU_NEW);
8661  newtree->Branch("p0minus_WW_VAJHU_NEW", &p0minus_WW_VAJHU_NEW);
8662  newtree->Branch("p0_g1prime2_WW_VAJHU_NEW", &p0_g1prime2_WW_VAJHU_NEW);
8663  newtree->Branch("pg1g2_WW_VAJHU_NEW", &pg1g2_WW_VAJHU_NEW);
8664  newtree->Branch("pg1g2_pi2_WW_VAJHU_NEW", &pg1g2_pi2_WW_VAJHU_NEW);
8665  newtree->Branch("pg1g4_WW_VAJHU_NEW", &pg1g4_WW_VAJHU_NEW);
8666  newtree->Branch("pg1g4_pi2_WW_VAJHU_NEW", &pg1g4_pi2_WW_VAJHU_NEW);
8667  newtree->Branch("pg1g1prime2_WW_VAJHU_NEW", &pg1g1prime2_WW_VAJHU_NEW);
8668  newtree->Branch("pg1g1prime2_pi2_WW_VAJHU_NEW", &pg1g1prime2_pi2_WW_VAJHU_NEW);
8669 
8670  newtree->Branch("bkg_WW_VAMCFM_NEW", &bkg_WW_VAMCFM_NEW);
8671  newtree->Branch("ggzz_WW_VAMCFM_NEW", &ggzz_WW_VAMCFM_NEW);
8672  newtree->Branch("p0plus_WW_VAMCFM_NEW", &p0plus_WW_VAMCFM_NEW);
8673  newtree->Branch("ggzz_p0plus_WW_VAMCFM_NEW", &ggzz_p0plus_WW_VAMCFM_NEW);
8674  newtree->Branch("p0plus_WW_VAMCFM_NEW_BSMOn", &p0plus_WW_VAMCFM_NEW_BSMOn);
8675  newtree->Branch("ggzz_p0plus_WW_VAMCFM_NEW_BSMOn", &ggzz_p0plus_WW_VAMCFM_NEW_BSMOn);
8676 
8677  newtree->Branch("p0hplus_WW_VAMCFM_NEW", &p0hplus_WW_VAMCFM_NEW);
8678  newtree->Branch("p0minus_WW_VAMCFM_NEW", &p0minus_WW_VAMCFM_NEW);
8679  newtree->Branch("p0_g1prime2_WW_VAMCFM_NEW", &p0_g1prime2_WW_VAMCFM_NEW);
8680  newtree->Branch("pg1g2_WW_VAMCFM_NEW", &pg1g2_WW_VAMCFM_NEW);
8681  newtree->Branch("pg1g2_pi2_WW_VAMCFM_NEW", &pg1g2_pi2_WW_VAMCFM_NEW);
8682  newtree->Branch("pg1g4_WW_VAMCFM_NEW", &pg1g4_WW_VAMCFM_NEW);
8683  newtree->Branch("pg1g4_pi2_WW_VAMCFM_NEW", &pg1g4_pi2_WW_VAMCFM_NEW);
8684  newtree->Branch("pg1g1prime2_WW_VAMCFM_NEW", &pg1g1prime2_WW_VAMCFM_NEW);
8685  newtree->Branch("pg1g1prime2_pi2_WW_VAMCFM_NEW", &pg1g1prime2_pi2_WW_VAMCFM_NEW);
8686 
8687  newtree->Branch("p0hplus_WW_VAMCFM_ratio_NEW", &p0hplus_WW_VAMCFM_ratio_NEW);
8688  newtree->Branch("p0minus_WW_VAMCFM_ratio_NEW", &p0minus_WW_VAMCFM_ratio_NEW);
8689  newtree->Branch("p0_g1prime2_WW_VAMCFM_ratio_NEW", &p0_g1prime2_WW_VAMCFM_ratio_NEW);
8690  newtree->Branch("pg1g2_WW_VAMCFM_ratio_NEW", &pg1g2_WW_VAMCFM_ratio_NEW);
8691  newtree->Branch("pg1g2_pi2_WW_VAMCFM_ratio_NEW", &pg1g2_pi2_WW_VAMCFM_ratio_NEW);
8692  newtree->Branch("pg1g4_WW_VAMCFM_ratio_NEW", &pg1g4_WW_VAMCFM_ratio_NEW);
8693  newtree->Branch("pg1g4_pi2_WW_VAMCFM_ratio_NEW", &pg1g4_pi2_WW_VAMCFM_ratio_NEW);
8694  newtree->Branch("pg1g1prime2_WW_VAMCFM_ratio_NEW", &pg1g1prime2_WW_VAMCFM_ratio_NEW);
8695  newtree->Branch("pg1g1prime2_pi2_WW_VAMCFM_ratio_NEW", &pg1g1prime2_pi2_WW_VAMCFM_ratio_NEW);
8696 
8697  newtree->Branch("p0hplus_WW_VAJHU_ratio_NEW", &p0hplus_WW_VAJHU_ratio_NEW);
8698  newtree->Branch("p0minus_WW_VAJHU_ratio_NEW", &p0minus_WW_VAJHU_ratio_NEW);
8699  newtree->Branch("p0_g1prime2_WW_VAJHU_ratio_NEW", &p0_g1prime2_WW_VAJHU_ratio_NEW);
8700  newtree->Branch("pg1g2_WW_VAJHU_ratio_NEW", &pg1g2_WW_VAJHU_ratio_NEW);
8701  newtree->Branch("pg1g2_pi2_WW_VAJHU_ratio_NEW", &pg1g2_pi2_WW_VAJHU_ratio_NEW);
8702  newtree->Branch("pg1g4_WW_VAJHU_ratio_NEW", &pg1g4_WW_VAJHU_ratio_NEW);
8703  newtree->Branch("pg1g4_pi2_WW_VAJHU_ratio_NEW", &pg1g4_pi2_WW_VAJHU_ratio_NEW);
8704  newtree->Branch("pg1g1prime2_WW_VAJHU_ratio_NEW", &pg1g1prime2_WW_VAJHU_ratio_NEW);
8705  newtree->Branch("pg1g1prime2_pi2_WW_VAJHU_ratio_NEW", &pg1g1prime2_pi2_WW_VAJHU_ratio_NEW);
8706 
8707  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
8708  GenLep1Id=14;
8709  GenLep2Id=-14;
8710  GenLep3Id=13;
8711  GenLep4Id=-13;
8712 
8713  for (int ev = 0; ev < min(1000, (int)tree->GetEntries()); ev++){
8714  tree->GetEntry(ev);
8715 
8716  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
8717  TLorentzVector pOrdered[4];
8718  std::vector<TLorentzVector> daus = mela.calculate4Momentum(mzz, m1, m2, acos(hs), acos(h1), acos(h2), phi1, phi);
8719  for (int ip=0; ip<min(4, (int)daus.size()); ip++) pOrdered[ip]=daus.at(ip);
8721  for (unsigned int idau=0; idau<4; idau++) daughters.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
8722  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
8723  mela.setInputEvent(&daughters, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
8724  mela.setCandidateDecayMode(TVar::CandidateDecay_WW);
8725  mela.setInputEvent(&daughters, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
8726  if (verbosity>=TVar::DEBUG){
8727  cout << "Mela candidate summary:" << endl;
8728  for (int ic=0; ic<mela.getNCandidates(); ic++){
8729  cout << "Candidate " << ic << endl;
8730  mela.setCurrentCandidateFromIndex(ic);
8731  TUtil::PrintCandidateSummary(mela.getCurrentCandidate());
8732  }
8733  cout << endl;
8734  }
8735 
8736  /***** ZZ *****/
8737  mela.setCurrentCandidateFromIndex(0);
8738 
8739  if (verbosity>=TVar::DEBUG) cout << "Computing bkg_VAMCFM_NEW" << endl;
8740  mela.setProcess(TVar::bkgZZ, TVar::MCFM, TVar::ZZQQB);
8741  mela.computeP(bkg_VAMCFM_NEW, false);
8742 
8743  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_VAMCFM_NEW" << endl;
8744  mela.setProcess(TVar::bkgZZ, TVar::MCFM, TVar::ZZGG);
8745  mela.computeP(ggzz_VAMCFM_NEW, false);
8746 
8747  if (verbosity>=TVar::DEBUG) cout << "Computing p0plus_VAMCFM_NEW" << endl;
8748  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
8749  mela.computeP(p0plus_VAMCFM_NEW, false);
8750 
8751  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_p0plus_VAMCFM_NEW" << endl;
8753  mela.computeP(ggzz_p0plus_VAMCFM_NEW, false);
8754 
8755  if (verbosity>=TVar::DEBUG) cout << "Computing p0plus_VAMCFM_NEW_BSMOn" << endl;
8756  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
8757  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8758  mela.computeP(p0plus_VAMCFM_NEW_BSMOn, false);
8759 
8760  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_p0plus_VAMCFM_NEW_BSMOn" << endl;
8762  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8763  mela.computeP(ggzz_p0plus_VAMCFM_NEW_BSMOn, false);
8764 
8766 
8767  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8768  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8769  mela.computeP(p0plus_VAJHU_NEW, false);
8770 
8771  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8772  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8773  mela.computeP(p0hplus_VAJHU_NEW, false);
8774 
8775  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8776  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8777  mela.computeP(p0minus_VAJHU_NEW, false);
8778 
8779  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8780  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-12046.01;
8781  mela.computeP(p0_g1prime2_VAJHU_NEW, false);
8782 
8783  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8784  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8785  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8786  mela.computeP(pg1g2_VAJHU_NEW, false);
8787  pg1g2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0hplus_VAJHU_NEW);
8788 
8789  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8790  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8791  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.638;
8792  mela.computeP(pg1g2_pi2_VAJHU_NEW, false);
8793  pg1g2_pi2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0hplus_VAJHU_NEW);
8794 
8795  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8796  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8797  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8798  mela.computeP(pg1g4_VAJHU_NEW, false);
8799  pg1g4_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0minus_VAJHU_NEW);
8800 
8801  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8802  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8803  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=2.521;
8804  mela.computeP(pg1g4_pi2_VAJHU_NEW, false);
8805  pg1g4_pi2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0minus_VAJHU_NEW);
8806 
8807  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8808  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8809  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=12046.01;
8810  mela.computeP(pg1g1prime2_VAJHU_NEW, false);
8811  pg1g1prime2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0_g1prime2_VAJHU_NEW);
8812 
8813  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8814  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8815  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][1]=12046.01;
8816  mela.computeP(pg1g1prime2_pi2_VAJHU_NEW, false);
8817  pg1g1prime2_pi2_VAJHU_NEW -= (p0plus_VAJHU_NEW + p0_g1prime2_VAJHU_NEW);
8818 
8819 
8820  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
8821 
8822  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8823  mela.computeP(p0plus_VAMCFM_NEW, false);
8824 
8825  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8826  mela.computeP(p0hplus_VAMCFM_NEW, false);
8827 
8828  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8829  mela.computeP(p0minus_VAMCFM_NEW, false);
8830 
8831  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-12046.01;
8832  mela.computeP(p0_g1prime2_VAMCFM_NEW, false);
8833 
8834  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8835  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8836  mela.computeP(pg1g2_VAMCFM_NEW, false);
8837  pg1g2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0hplus_VAMCFM_NEW);
8838 
8839  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8840  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.638;
8841  mela.computeP(pg1g2_pi2_VAMCFM_NEW, false);
8842  pg1g2_pi2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0hplus_VAMCFM_NEW);
8843 
8844  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8845  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8846  mela.computeP(pg1g4_VAMCFM_NEW, false);
8847  pg1g4_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0minus_VAMCFM_NEW);
8848 
8849  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8850  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=2.521;
8851  mela.computeP(pg1g4_pi2_VAMCFM_NEW, false);
8852  pg1g4_pi2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0minus_VAMCFM_NEW);
8853 
8854  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8855  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=12046.01;
8856  mela.computeP(pg1g1prime2_VAMCFM_NEW, false);
8857  pg1g1prime2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0_g1prime2_VAMCFM_NEW);
8858 
8859  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8860  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][1]=12046.01;
8861  mela.computeP(pg1g1prime2_pi2_VAMCFM_NEW, false);
8862  pg1g1prime2_pi2_VAMCFM_NEW -= (p0plus_VAMCFM_NEW + p0_g1prime2_VAMCFM_NEW);
8863 
8864 
8865  p0hplus_VAJHU_ratio_NEW = p0hplus_VAJHU_NEW/p0plus_VAJHU_NEW;
8866  p0minus_VAJHU_ratio_NEW = p0minus_VAJHU_NEW/p0plus_VAJHU_NEW;
8867  p0_g1prime2_VAJHU_ratio_NEW = p0_g1prime2_VAJHU_NEW/p0plus_VAJHU_NEW;
8868  pg1g2_VAJHU_ratio_NEW = pg1g2_VAJHU_NEW/p0plus_VAJHU_NEW;
8869  pg1g4_VAJHU_ratio_NEW = pg1g4_VAJHU_NEW/p0plus_VAJHU_NEW;
8870  pg1g1prime2_VAJHU_ratio_NEW = pg1g1prime2_VAJHU_NEW/p0plus_VAJHU_NEW;
8871  pg1g2_pi2_VAJHU_ratio_NEW = pg1g2_pi2_VAJHU_NEW/p0plus_VAJHU_NEW;
8872  pg1g4_pi2_VAJHU_ratio_NEW = pg1g4_pi2_VAJHU_NEW/p0plus_VAJHU_NEW;
8873  pg1g1prime2_pi2_VAJHU_ratio_NEW = pg1g1prime2_pi2_VAJHU_NEW/p0plus_VAJHU_NEW;
8874 
8875  p0hplus_VAMCFM_ratio_NEW = p0hplus_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8876  p0minus_VAMCFM_ratio_NEW = p0minus_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8877  p0_g1prime2_VAMCFM_ratio_NEW = p0_g1prime2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8878  pg1g2_VAMCFM_ratio_NEW = pg1g2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8879  pg1g4_VAMCFM_ratio_NEW = pg1g4_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8880  pg1g1prime2_VAMCFM_ratio_NEW = pg1g1prime2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8881  pg1g2_pi2_VAMCFM_ratio_NEW = pg1g2_pi2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8882  pg1g4_pi2_VAMCFM_ratio_NEW = pg1g4_pi2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8883  pg1g1prime2_pi2_VAMCFM_ratio_NEW = pg1g1prime2_pi2_VAMCFM_NEW/p0plus_VAMCFM_NEW;
8884 
8885 
8886 
8887  /***** WW *****/
8888  mela.setCurrentCandidateFromIndex(1);
8889 
8890  if (verbosity>=TVar::DEBUG) cout << "Computing bkg_WW_VAMCFM_NEW" << endl;
8891  mela.setProcess(TVar::bkgWW, TVar::MCFM, TVar::ZZQQB);
8892  mela.computeP(bkg_WW_VAMCFM_NEW, false);
8893 
8894  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_WW_VAMCFM_NEW" << endl;
8895  mela.setProcess(TVar::bkgWW, TVar::MCFM, TVar::ZZGG);
8896  mela.computeP(ggzz_WW_VAMCFM_NEW, false);
8897 
8898  if (verbosity>=TVar::DEBUG) cout << "Computing p0plus_WW_VAMCFM_NEW" << endl;
8899  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
8900  mela.computeP(p0plus_WW_VAMCFM_NEW, false);
8901 
8902  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_p0plus_WW_VAMCFM_NEW" << endl;
8904  mela.computeP(ggzz_p0plus_WW_VAMCFM_NEW, false);
8905 
8906  if (verbosity>=TVar::DEBUG) cout << "Computing p0plus_WW_VAMCFM_NEW_BSMOn" << endl;
8907  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
8908  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8909  mela.computeP(p0plus_WW_VAMCFM_NEW_BSMOn, false);
8910 
8911  if (verbosity>=TVar::DEBUG) cout << "Computing ggzz_p0plus_WW_VAMCFM_NEW_BSMOn" << endl;
8913  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8914  mela.computeP(ggzz_p0plus_WW_VAMCFM_NEW_BSMOn, false);
8915 
8917 
8918  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8919  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8920  mela.computeP(p0plus_WW_VAJHU_NEW, false);
8921 
8922  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8923  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8924  mela.computeP(p0hplus_WW_VAJHU_NEW, false);
8925 
8926  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8927  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8928  mela.computeP(p0minus_WW_VAJHU_NEW, false);
8929 
8930  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8931  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-12046.01;
8932  mela.computeP(p0_g1prime2_WW_VAJHU_NEW, false);
8933 
8934  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8935  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8936  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8937  mela.computeP(pg1g2_WW_VAJHU_NEW, false);
8938  pg1g2_WW_VAJHU_NEW -= (p0plus_WW_VAJHU_NEW + p0hplus_WW_VAJHU_NEW);
8939 
8940  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8941  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8942  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.638;
8943  mela.computeP(pg1g2_pi2_WW_VAJHU_NEW, false);
8944  pg1g2_pi2_WW_VAJHU_NEW -= (p0plus_WW_VAJHU_NEW + p0hplus_WW_VAJHU_NEW);
8945 
8946  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8947  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8948  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8949  mela.computeP(pg1g4_WW_VAJHU_NEW, false);
8950  pg1g4_WW_VAJHU_NEW -= (p0plus_WW_VAJHU_NEW + p0minus_WW_VAJHU_NEW);
8951 
8952  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8953  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8954  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=2.521;
8955  mela.computeP(pg1g4_pi2_WW_VAJHU_NEW, false);
8956  pg1g4_pi2_WW_VAJHU_NEW -= (p0plus_WW_VAJHU_NEW + p0minus_WW_VAJHU_NEW);
8957 
8958  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8959  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8960  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=12046.01;
8961  mela.computeP(pg1g1prime2_WW_VAJHU_NEW, false);
8962  pg1g1prime2_WW_VAJHU_NEW -= (p0plus_WW_VAJHU_NEW + p0_g1prime2_WW_VAJHU_NEW);
8963 
8964  mela.selfDHggcoupl[0][gHIGGS_GG_2][0]=1;
8965  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8966  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][1]=12046.01;
8967  mela.computeP(pg1g1prime2_pi2_WW_VAJHU_NEW, false);
8968  pg1g1prime2_pi2_WW_VAJHU_NEW -= (p0plus_WW_VAJHU_NEW + p0_g1prime2_WW_VAJHU_NEW);
8969 
8970 
8971  mela.setProcess(TVar::HSMHiggs, TVar::MCFM, TVar::ZZGG);
8972 
8973  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8974  mela.computeP(p0plus_WW_VAMCFM_NEW, false);
8975 
8976  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8977  mela.computeP(p0hplus_WW_VAMCFM_NEW, false);
8978 
8979  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8980  mela.computeP(p0minus_WW_VAMCFM_NEW, false);
8981 
8982  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=-12046.01;
8983  mela.computeP(p0_g1prime2_WW_VAMCFM_NEW, false);
8984 
8985  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8986  mela.selfDHzzcoupl[0][gHIGGS_VV_2][0]=1.638;
8987  mela.computeP(pg1g2_WW_VAMCFM_NEW, false);
8988  pg1g2_WW_VAMCFM_NEW -= (p0plus_WW_VAMCFM_NEW + p0hplus_WW_VAMCFM_NEW);
8989 
8990  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8991  mela.selfDHzzcoupl[0][gHIGGS_VV_2][1]=1.638;
8992  mela.computeP(pg1g2_pi2_WW_VAMCFM_NEW, false);
8993  pg1g2_pi2_WW_VAMCFM_NEW -= (p0plus_WW_VAMCFM_NEW + p0hplus_WW_VAMCFM_NEW);
8994 
8995  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
8996  mela.selfDHzzcoupl[0][gHIGGS_VV_4][0]=2.521;
8997  mela.computeP(pg1g4_WW_VAMCFM_NEW, false);
8998  pg1g4_WW_VAMCFM_NEW -= (p0plus_WW_VAMCFM_NEW + p0minus_WW_VAMCFM_NEW);
8999 
9000  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
9001  mela.selfDHzzcoupl[0][gHIGGS_VV_4][1]=2.521;
9002  mela.computeP(pg1g4_pi2_WW_VAMCFM_NEW, false);
9003  pg1g4_pi2_WW_VAMCFM_NEW -= (p0plus_WW_VAMCFM_NEW + p0minus_WW_VAMCFM_NEW);
9004 
9005  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
9006  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][0]=12046.01;
9007  mela.computeP(pg1g1prime2_WW_VAMCFM_NEW, false);
9008  pg1g1prime2_WW_VAMCFM_NEW -= (p0plus_WW_VAMCFM_NEW + p0_g1prime2_WW_VAMCFM_NEW);
9009 
9010  mela.selfDHzzcoupl[0][gHIGGS_VV_1][0]=1;
9011  mela.selfDHzzcoupl[0][gHIGGS_VV_1_PRIME2][1]=12046.01;
9012  mela.computeP(pg1g1prime2_pi2_WW_VAMCFM_NEW, false);
9013  pg1g1prime2_pi2_WW_VAMCFM_NEW -= (p0plus_WW_VAMCFM_NEW + p0_g1prime2_WW_VAMCFM_NEW);
9014 
9015 
9016  p0hplus_WW_VAJHU_ratio_NEW = p0hplus_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9017  p0minus_WW_VAJHU_ratio_NEW = p0minus_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9018  p0_g1prime2_WW_VAJHU_ratio_NEW = p0_g1prime2_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9019  pg1g2_WW_VAJHU_ratio_NEW = pg1g2_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9020  pg1g4_WW_VAJHU_ratio_NEW = pg1g4_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9021  pg1g1prime2_WW_VAJHU_ratio_NEW = pg1g1prime2_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9022  pg1g2_pi2_WW_VAJHU_ratio_NEW = pg1g2_pi2_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9023  pg1g4_pi2_WW_VAJHU_ratio_NEW = pg1g4_pi2_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9024  pg1g1prime2_pi2_WW_VAJHU_ratio_NEW = pg1g1prime2_pi2_WW_VAJHU_NEW/p0plus_WW_VAJHU_NEW;
9025 
9026  p0hplus_WW_VAMCFM_ratio_NEW = p0hplus_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9027  p0minus_WW_VAMCFM_ratio_NEW = p0minus_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9028  p0_g1prime2_WW_VAMCFM_ratio_NEW = p0_g1prime2_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9029  pg1g2_WW_VAMCFM_ratio_NEW = pg1g2_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9030  pg1g4_WW_VAMCFM_ratio_NEW = pg1g4_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9031  pg1g1prime2_WW_VAMCFM_ratio_NEW = pg1g1prime2_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9032  pg1g2_pi2_WW_VAMCFM_ratio_NEW = pg1g2_pi2_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9033  pg1g4_pi2_WW_VAMCFM_ratio_NEW = pg1g4_pi2_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9034  pg1g1prime2_pi2_WW_VAMCFM_ratio_NEW = pg1g1prime2_pi2_WW_VAMCFM_NEW/p0plus_WW_VAMCFM_NEW;
9035 
9036 
9037  mela.resetInputEvent();
9038  newtree->Fill();
9039  }
9040 
9041 
9042  foutput->WriteTObject(newtree);
9043  foutput->Close();
9044  finput->Close();
9045  mela.setVerbosity(bkpverbosity);
9046 }
9047 
9048 void testME_SuperMela_FullSim(int flavor=2, bool useBkgSample=false, bool debug=false, shared_ptr<Mela> melaptr=nullptr){
9049  int erg_tev=8;
9050  float mPOLE=125.6;
9051  TString TREE_NAME = "SelectedTree";
9052 
9053  TVar::VerbosityLevel verbosity = (debug ? TVar::DEBUG : TVar::ERROR);
9054  if (!melaptr) {
9055  melaptr.reset(new Mela(erg_tev, mPOLE, verbosity));
9056  }
9057  Mela& mela = *melaptr;
9058  TVar::VerbosityLevel bkpverbosity = mela.getVerbosity();
9059  mela.setVerbosity(verbosity);
9060  if (verbosity>=TVar::DEBUG) cout << "Mela is initialized" << endl;
9061 
9062  TString cinput_main = "/scratch0/hep/ianderso/CJLST/140519/PRODFSR_8TeV";
9063  TFile* finput;
9064  TFile* foutput;
9065  if (!useBkgSample){
9066  finput = new TFile(Form("%s/%s/HZZ4lTree_powheg15jhuGenV3-0PMH125.6.root", cinput_main.Data(), (flavor>=2 ? "2mu2e" : "4e")), "read");
9067  foutput = new TFile(Form("HZZ4lTree_powheg15jhuGenV3-0PMH125.6_%s_OriginalMEv2ValidationTestOnly.root", (flavor>=2 ? "2mu2e" : "4e")), "recreate");
9068  }
9069  else{
9070  finput = new TFile(Form("%s/%s/HZZ4lTree_ZZTo%s.root", cinput_main.Data(), (flavor>=2 ? "2mu2e" : "4e"), (flavor==2 ? "2e2mu" : "4e")), "read");
9071  foutput = new TFile(Form("HZZ4lTree_ZZTo%s_OriginalMEv2ValidationTestOnly.root", (flavor>=2 ? "2e2mu" : "4e")), "recreate");
9072  }
9073 
9074  float p0plus_m4l, p0plus_m4l_ScaleUp, p0plus_m4l_ScaleDown, p0plus_m4l_ResUp, p0plus_m4l_ResDown;
9075  float bkg_m4l, bkg_m4l_ScaleUp, bkg_m4l_ScaleDown, bkg_m4l_ResUp, bkg_m4l_ResDown;
9076 
9077  float p0plus_m4l_NEW, p0plus_m4l_ScaleUp_NEW, p0plus_m4l_ScaleDown_NEW, p0plus_m4l_ResUp_NEW, p0plus_m4l_ResDown_NEW;
9078  float bkg_m4l_NEW, bkg_m4l_ScaleUp_NEW, bkg_m4l_ScaleDown_NEW, bkg_m4l_ResUp_NEW, bkg_m4l_ResDown_NEW;
9079 
9080  float mzz = 126.;
9081  float m1 = 91.471450;
9082  float m2 = 12.139782;
9083  float h1 = 0.2682896;
9084  float h2 = 0.1679779;
9085  float phi = 1.5969792;
9086  float hs = -0.727181;
9087  float phi1 = 1.8828257;
9088 
9089  TTree* tree = (TTree*)finput->Get(TREE_NAME);
9090  tree->SetBranchAddress("ZZMass", &mzz);
9091  tree->SetBranchAddress("Z1Mass", &m1);
9092  tree->SetBranchAddress("Z2Mass", &m2);
9093  tree->SetBranchAddress("helcosthetaZ1", &h1);
9094  tree->SetBranchAddress("helcosthetaZ2", &h2);
9095  tree->SetBranchAddress("helphi", &phi);
9096  tree->SetBranchAddress("costhetastar", &hs);
9097  tree->SetBranchAddress("phistarZ1", &phi1);
9098  tree->SetBranchAddress("p0plus_m4l", &p0plus_m4l);
9099  tree->SetBranchAddress("p0plus_m4l_ScaleUp", &p0plus_m4l_ScaleUp);
9100  tree->SetBranchAddress("p0plus_m4l_ScaleDown", &p0plus_m4l_ScaleDown);
9101  tree->SetBranchAddress("p0plus_m4l_ResUp", &p0plus_m4l_ResUp);
9102  tree->SetBranchAddress("p0plus_m4l_ResDown", &p0plus_m4l_ResDown);
9103  tree->SetBranchAddress("bkg_m4l", &bkg_m4l);
9104  tree->SetBranchAddress("bkg_m4l_ScaleUp", &bkg_m4l_ScaleUp);
9105  tree->SetBranchAddress("bkg_m4l_ScaleDown", &bkg_m4l_ScaleDown);
9106  tree->SetBranchAddress("bkg_m4l_ResUp", &bkg_m4l_ResUp);
9107  tree->SetBranchAddress("bkg_m4l_ResDown", &bkg_m4l_ResDown);
9108 
9109  TTree* newtree = new TTree("TestTree", "");
9110  newtree->Branch("ZZMass", &mzz);
9111  newtree->Branch("Z1Mass", &m1);
9112  newtree->Branch("Z2Mass", &m2);
9113  newtree->Branch("helcosthetaZ1", &h1);
9114  newtree->Branch("helcosthetaZ2", &h2);
9115  newtree->Branch("helphi", &phi);
9116  newtree->Branch("costhetastar", &hs);
9117  newtree->Branch("phistarZ1", &phi1);
9118 
9119  newtree->Branch("p0plus_m4l", &p0plus_m4l);
9120  newtree->Branch("p0plus_m4l_ScaleUp", &p0plus_m4l_ScaleUp);
9121  newtree->Branch("p0plus_m4l_ScaleDown", &p0plus_m4l_ScaleDown);
9122  newtree->Branch("p0plus_m4l_ResUp", &p0plus_m4l_ResUp);
9123  newtree->Branch("p0plus_m4l_ResDown", &p0plus_m4l_ResDown);
9124  newtree->Branch("bkg_m4l", &bkg_m4l);
9125  newtree->Branch("bkg_m4l_ScaleUp", &bkg_m4l_ScaleUp);
9126  newtree->Branch("bkg_m4l_ScaleDown", &bkg_m4l_ScaleDown);
9127  newtree->Branch("bkg_m4l_ResUp", &bkg_m4l_ResUp);
9128  newtree->Branch("bkg_m4l_ResDown", &bkg_m4l_ResDown);
9129 
9130  newtree->Branch("p0plus_m4l_NEW", &p0plus_m4l_NEW);
9131  newtree->Branch("p0plus_m4l_ScaleUp_NEW", &p0plus_m4l_ScaleUp_NEW);
9132  newtree->Branch("p0plus_m4l_ScaleDown_NEW", &p0plus_m4l_ScaleDown_NEW);
9133  newtree->Branch("p0plus_m4l_ResUp_NEW", &p0plus_m4l_ResUp_NEW);
9134  newtree->Branch("p0plus_m4l_ResDown_NEW", &p0plus_m4l_ResDown_NEW);
9135  newtree->Branch("bkg_m4l_NEW", &bkg_m4l_NEW);
9136  newtree->Branch("bkg_m4l_ScaleUp_NEW", &bkg_m4l_ScaleUp_NEW);
9137  newtree->Branch("bkg_m4l_ScaleDown_NEW", &bkg_m4l_ScaleDown_NEW);
9138  newtree->Branch("bkg_m4l_ResUp_NEW", &bkg_m4l_ResUp_NEW);
9139  newtree->Branch("bkg_m4l_ResDown_NEW", &bkg_m4l_ResDown_NEW);
9140 
9141  float GenLep1Id=0, GenLep2Id=0, GenLep3Id=0, GenLep4Id=0;
9142  if (flavor == 2){
9143  GenLep1Id=13;
9144  GenLep2Id=-13;
9145  GenLep3Id=11;
9146  GenLep4Id=-11;
9147  }
9148  else if (flavor == 1){
9149  GenLep1Id=11;
9150  GenLep2Id=-11;
9151  GenLep3Id=11;
9152  GenLep4Id=-11;
9153  }
9154  else if (flavor == 0){
9155  GenLep1Id=13;
9156  GenLep2Id=-13;
9157  GenLep3Id=13;
9158  GenLep4Id=-13;
9159  }
9160  else if (flavor == 3){
9161  GenLep1Id=14;
9162  GenLep2Id=-14;
9163  GenLep3Id=13;
9164  GenLep4Id=-13;
9165  }
9166  else if (flavor == 4){
9167  GenLep1Id=0;
9168  GenLep2Id=-0;
9169  GenLep3Id=1;
9170  GenLep4Id=-1;
9171  }
9172  else if (flavor == 5){
9173  GenLep1Id=1;
9174  GenLep2Id=-1;
9175  GenLep3Id=2;
9176  GenLep4Id=-2;
9177  }
9178  mela.setCandidateDecayMode(TVar::CandidateDecay_ZZ);
9179 
9180  for (int ev = 0; ev < (verbosity>=TVar::DEBUG ? 1 : (!useBkgSample ? min(1000, (int)tree->GetEntries()) : (int)tree->GetEntries())); ev++){
9181  tree->GetEntry(ev);
9182  if (ev%10000 == 0) cout << "Processing event " << ev << endl;
9183 
9184  int idOrdered[4] ={ static_cast<int>(GenLep1Id), static_cast<int>(GenLep2Id), static_cast<int>(GenLep3Id), static_cast<int>(GenLep4Id) };
9185  TLorentzVector pOrdered[4];
9186  std::vector<TLorentzVector> daus = mela.calculate4Momentum(mzz, m1, m2, acos(hs), acos(h1), acos(h2), phi1, phi);
9187  for (int ip=0; ip<min(4, (int)daus.size()); ip++) pOrdered[ip]=daus.at(ip);
9188  SimpleParticleCollection_t daughters_ZZ;
9189  for (unsigned int idau=0; idau<4; idau++) daughters_ZZ.push_back(SimpleParticle_t(idOrdered[idau], pOrdered[idau]));
9190  mela.setInputEvent(&daughters_ZZ, (SimpleParticleCollection_t*)0, (SimpleParticleCollection_t*)0, false);
9191 
9192  /***** ZZ *****/
9193 
9195  mela.computePM4l(TVar::SMSyst_None, p0plus_m4l_NEW);
9196  mela.computePM4l(TVar::SMSyst_ScaleUp, p0plus_m4l_ScaleUp_NEW);
9197  mela.computePM4l(TVar::SMSyst_ScaleDown, p0plus_m4l_ScaleDown_NEW);
9198  mela.computePM4l(TVar::SMSyst_ResUp, p0plus_m4l_ResUp_NEW);
9199  mela.computePM4l(TVar::SMSyst_ResDown, p0plus_m4l_ResDown_NEW);
9200 
9201  mela.setProcess(TVar::bkgZZ, TVar::JHUGen, TVar::ZZGG);
9202  mela.computePM4l(TVar::SMSyst_None, bkg_m4l_NEW);
9203  mela.computePM4l(TVar::SMSyst_ScaleUp, bkg_m4l_ScaleUp_NEW);
9204  mela.computePM4l(TVar::SMSyst_ScaleDown, bkg_m4l_ScaleDown_NEW);
9205  mela.computePM4l(TVar::SMSyst_ResUp, bkg_m4l_ResUp_NEW);
9206  mela.computePM4l(TVar::SMSyst_ResDown, bkg_m4l_ResDown_NEW);
9207 
9208  mela.resetInputEvent();
9209  newtree->Fill();
9210  }
9211 
9212  foutput->WriteTObject(newtree);
9213  foutput->Close();
9214  finput->Close();
9215  mela.setVerbosity(bkpverbosity);
9216 }
TVar::ERROR
@ ERROR
Definition: TVar.hh:49
TVar::bkgWW_SMHiggs
@ bkgWW_SMHiggs
Definition: TVar.hh:171
testME_ProdDec_JHUGen_SpinTwo_Ping
void testME_ProdDec_JHUGen_SpinTwo_Ping(int flavor=2, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:7197
SimpleParticle_t
std::pair< int, TLorentzVector > SimpleParticle_t
Definition: TVar.hh:24
TVar::JJVBF
@ JJVBF
Definition: TVar.hh:72
PDGHelpers::isALepton
bool isALepton(const int id)
Definition: PDGHelpers.cc:62
testME_ProdDec_MCFM_Ping
void testME_ProdDec_MCFM_Ping(int flavor=2, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:5906
TVar::Had_ZH_S
@ Had_ZH_S
Definition: TVar.hh:86
gHIGGS_Vp_Dn_left
@ gHIGGS_Vp_Dn_left
Definition: raw_couplings.txt:87
mela.daughters
string daughters
Definition: mela.py:767
MELAParticle::getDaughter
MELAParticle * getDaughter(int index) const
Definition: MELAParticle.cc:68
TVar::H0_Zgs_PS
@ H0_Zgs_PS
Definition: TVar.hh:132
testME_VBF_JHUGen_Ping
void testME_VBF_JHUGen_Ping(int erg_tev=13, bool useConstants=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:2432
TVar::VerbosityLevel
VerbosityLevel
Definition: TVar.hh:47
makemelaptr
shared_ptr< Mela > makemelaptr(int erg_tev, float mPOLE, TVar::VerbosityLevel verbosity)
Definition: testME_v2.c:62
gHIGGS_KAPPA_TILDE
@ gHIGGS_KAPPA_TILDE
Definition: raw_couplings.txt:3
testME_Dec_ANALYTICAL_FullSim
void testME_Dec_ANALYTICAL_FullSim(int erg_tev=13, bool useConstants=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:284
TVar::Fixed_mH
@ Fixed_mH
Definition: TVar.hh:198
mela
Definition: mela.py:1
gHIGGS_Vp_Dn_right
@ gHIGGS_Vp_Dn_right
Definition: raw_couplings.txt:88
gHIGGS_Vp_NuE_left
@ gHIGGS_Vp_NuE_left
Definition: raw_couplings.txt:84
TVar::H0minus
@ H0minus
Definition: TVar.hh:129
TVar::CandidateDecay_ZZ
@ CandidateDecay_ZZ
Definition: TVar.hh:41
MELAwithOptions::MELAwithOptions
MELAwithOptions(double sqrts_, double mh_, TVar::VerbosityLevel verbosity_=TVar::ERROR)
Definition: testME_v2.c:31
gHIGGS_Vp_Up_left
@ gHIGGS_Vp_Up_left
Definition: raw_couplings.txt:89
TVar::bkgGammaGamma
@ bkgGammaGamma
Definition: TVar.hh:163
TUtil::SetCKMElements
void SetCKMElements(double *invckm_ud, double *invckm_us, double *invckm_cd, double *invckm_cs, double *invckm_ts, double *invckm_tb, double *invckm_ub=0, double *invckm_cb=0, double *invckm_td=0)
Definition: TUtil.cc:1507
testME_ProdDec_MCFM_JHUGen_WBFZZWW_TU_Comparison_Ping
void testME_ProdDec_MCFM_JHUGen_WBFZZWW_TU_Comparison_Ping(int motherflavor=0, int isZZWW=0, int vbfvhchannel=1, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:5189
TVar::Lep_WH_S
@ Lep_WH_S
Definition: TVar.hh:89
testME_SuperMela_FullSim
void testME_SuperMela_FullSim(int flavor=2, bool useBkgSample=false, bool debug=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:9048
gHIGGS_Vp_El_right
@ gHIGGS_Vp_El_right
Definition: raw_couplings.txt:79
MELACandidate::getSortedV
MELAParticle * getSortedV(int index) const
Definition: MELACandidate.cc:152
gHIGGS_Vp_Chm_left
@ gHIGGS_Vp_Chm_left
Definition: raw_couplings.txt:93
TVar::ProductionName
TString ProductionName(TVar::Production temp)
Definition: TVar.cc:64
TVar::GammaH
@ GammaH
Definition: TVar.hh:102
Mela::setVerbosity
void setVerbosity(TVar::VerbosityLevel verbosity_=TVar::ERROR)
Sets the verbosity for MELA outside of the initial constructor.
Definition: Mela.cc:325
testME_Dec_ANALYTICAL_Ping
void testME_Dec_ANALYTICAL_Ping(int erg_tev=13, bool useConstants=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:68
testME_ProdDec_MCFM_JHUGen_Comparison
void testME_ProdDec_MCFM_JHUGen_Comparison(int flavor=2, bool useBkgSample=false, int motherflavor=0, int isZZWW=0, int vbfvhchannel=1, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:6145
TVar::SelfDefine_spin2
@ SelfDefine_spin2
Definition: TVar.hh:182
TVar::bkgZJets
@ bkgZJets
Definition: TVar.hh:165
testME_Prop_Ping
void testME_Prop_Ping(int useMothers=0, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:3016
TVar::ZZINDEPENDENT
@ ZZINDEPENDENT
Definition: TVar.hh:64
TVar::EventScaleScheme
EventScaleScheme
Definition: TVar.hh:196
TVar::JJQCD
@ JJQCD
Definition: TVar.hh:71
mela.prod
prod
Definition: mela.py:806
TVar::HSMHiggs_WWZZ
@ HSMHiggs_WWZZ
Definition: TVar.hh:174
gHIGGS_Vp_Mu_left
@ gHIGGS_Vp_Mu_left
Definition: raw_couplings.txt:80
testME_all.p
p
Definition: testME_all.py:11
TVar::ZZQQB
@ ZZQQB
Definition: TVar.hh:62
TVar::CandidateDecay_WW
@ CandidateDecay_WW
Definition: TVar.hh:40
TUtil::PrintCandidateSummary
void PrintCandidateSummary(MELACandidate *cand)
Definition: TUtil.cc:8590
gHIGGS_AA_2
@ gHIGGS_AA_2
Definition: raw_couplings.txt:18
gGRAVITON_VV_1
@ gGRAVITON_VV_1
Definition: raw_couplings.txt:135
TVar::nEventScaleSchemes
@ nEventScaleSchemes
Definition: TVar.hh:214
gGRAVITON_AA_1
@ gGRAVITON_AA_1
Definition: raw_couplings.txt:152
TVar::DEBUG_VERBOSE
@ DEBUG_VERBOSE
Definition: TVar.hh:52
gHIGGS_Vp_NuE_right
@ gHIGGS_Vp_NuE_right
Definition: raw_couplings.txt:85
mela.mothers
string mothers
Definition: mela.py:777
gHIGGS_Vp_Mu_right
@ gHIGGS_Vp_Mu_right
Definition: raw_couplings.txt:81
PDGHelpers::isANeutrino
bool isANeutrino(const int id)
Definition: PDGHelpers.cc:67
gHIGGS_ZA_2
@ gHIGGS_ZA_2
Definition: raw_couplings.txt:14
TVar::SMSyst_ResUp
@ SMSyst_ResUp
Definition: TVar.hh:193
TVar::ZZGG
@ ZZGG
Definition: TVar.hh:61
TVar::H0_Zgsg1prime2
@ H0_Zgsg1prime2
Definition: TVar.hh:130
TVar::bkgWW
@ bkgWW
Definition: TVar.hh:167
testME_ProdP_VH_FullSim
void testME_ProdP_VH_FullSim(shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:8080
TVar::bkgWWZZ
@ bkgWWZZ
Definition: TVar.hh:168
TVar::H0_g1prime2
@ H0_g1prime2
Definition: TVar.hh:127
gHIGGS_Vp_Top_right
@ gHIGGS_Vp_Top_right
Definition: raw_couplings.txt:98
testME_Dec_MCFM_Ping
void testME_Dec_MCFM_Ping(int flavor=2, int useMothers=0, bool useConstants=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:556
testME_ProdP_VBFHJJ_FullSim
void testME_ProdP_VBFHJJ_FullSim(int flavor=2, bool useConstants=false, bool useBkgSample=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:7873
modparameters::ev
real(8), parameter, public ev
Definition: mod_Parameters.F90:97
TVar::SMSyst_None
@ SMSyst_None
Definition: TVar.hh:188
testME_all.int
int
Definition: testME_all.py:13
TVar::H0_gsgs_PS
@ H0_gsgs_PS
Definition: TVar.hh:134
testME_Dec_ZZWWComparison_FullSim
void testME_Dec_ZZWWComparison_FullSim(shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:8474
TVar::HSMHiggs
@ HSMHiggs
Definition: TVar.hh:126
TVar::Lep_WH_TU
@ Lep_WH_TU
Definition: TVar.hh:100
testME_Dec_JHUGenMCFM_Ping
void testME_Dec_JHUGenMCFM_Ping(int flavor=2, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:6689
TVar::bkgZGamma
@ bkgZGamma
Definition: TVar.hh:164
anonymous_namespace{TCouplingsBase.hh}::gHIGGS_GG_4
@ gHIGGS_GG_4
Definition: TCouplingsBase.hh:38
r
double r[nf]
Definition: TMCFM.hh:274
TVar::H0_gsgs
@ H0_gsgs
Definition: TVar.hh:133
gHIGGS_VV_1_PRIME2
@ gHIGGS_VV_1_PRIME2
Definition: raw_couplings.txt:23
gHIGGS_VV_4
@ gHIGGS_VV_4
Definition: raw_couplings.txt:12
testME_JVBF_JHUGen_Ping
void testME_JVBF_JHUGen_Ping(shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:2949
TUtil::GetCKMElement
double GetCKMElement(int iquark, int jquark)
Definition: TUtil.cc:1525
gHIGGS_Vp_Chm_right
@ gHIGGS_Vp_Chm_right
Definition: raw_couplings.txt:94
TUtil::computeVHAngles
void computeVHAngles(float &costhetastar, float &costheta1, float &costheta2, float &Phi, float &Phi1, float &m1, float &m2, TLorentzVector p4M11, int Z1_lept1Id, TLorentzVector p4M12, int Z1_lept2Id, TLorentzVector p4M21, int Z2_lept1Id, TLorentzVector p4M22, int Z2_lept2Id, TLorentzVector jet1, int jet1Id, TLorentzVector jet2, int jet2Id, TLorentzVector *injet1=0, int injet1Id=0, TLorentzVector *injet2=0, int injet2Id=0)
Definition: TUtil.cc:873
TVar::Had_ZH_TU
@ Had_ZH_TU
Definition: TVar.hh:97
TVar::MCFM
@ MCFM
Definition: TVar.hh:56
TVar::Lep_ZH_S
@ Lep_ZH_S
Definition: TVar.hh:88
mela.associated
string associated
Definition: mela.py:773
testME_RenFacScales_Ping
void testME_RenFacScales_Ping(shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:477
TVar::JJEW_S
@ JJEW_S
Definition: TVar.hh:84
gHIGGS_Vp_Up_right
@ gHIGGS_Vp_Up_right
Definition: raw_couplings.txt:90
MELAwithOptions
Definition: testME_v2.c:26
TUtil::computeAngles
void computeAngles(float &costhetastar, float &costheta1, float &costheta2, float &Phi, float &Phi1, TLorentzVector Z1_lept1, int Z1_lept1Id, TLorentzVector Z1_lept2, int Z1_lept2Id, TLorentzVector Z2_lept1, int Z2_lept1Id, TLorentzVector Z2_lept2, int Z2_lept2Id)
Definition: TUtil.cc:208
testME_ProdDec_MCFM_JHUGen_WBFZZWW_Comparison_Ping
void testME_ProdDec_MCFM_JHUGen_WBFZZWW_Comparison_Ping(int motherflavor=0, int isZZWW=0, int vbfvhchannel=0, int decZZWW=1, int hasInterf=0, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:3155
TVar::SMSyst_ResDown
@ SMSyst_ResDown
Definition: TVar.hh:194
anonymous_namespace{TCouplingsBase.hh}::gHIGGS_GG_2
@ gHIGGS_GG_2
Definition: TCouplingsBase.hh:36
testME_VH_JHUGen_Ping
void testME_VH_JHUGen_Ping(int erg_tev=13, bool useConstants=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:1711
TVar::JJVBF_TU
@ JJVBF_TU
Definition: TVar.hh:94
nmsq
@ nmsq
Definition: TMCFM.hh:24
testME_ProdP_TTHBBH_FullSim
void testME_ProdP_TTHBBH_FullSim(shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:8298
TVar::bkgWWZZ_SMHiggs
@ bkgWWZZ_SMHiggs
Definition: TVar.hh:172
gHIGGS_Vp_Top_left
@ gHIGGS_Vp_Top_left
Definition: raw_couplings.txt:97
TVar::JHUGen
@ JHUGen
Definition: TVar.hh:57
gHIGGS_AA_4
@ gHIGGS_AA_4
Definition: raw_couplings.txt:20
MELACandidate::getAssociatedJet
MELAParticle * getAssociatedJet(int index) const
Definition: MELACandidate.cc:168
TVar::Had_ZH
@ Had_ZH
Definition: TVar.hh:75
gHIGGS_VV_1_PRIME3
@ gHIGGS_VV_1_PRIME3
Definition: raw_couplings.txt:24
dd_global::cout
integer cout
Definition: DD_global.F90:21
Mela
Definition: Mela.h:48
spinzerohiggs_anomcoupl_
struct @43 spinzerohiggs_anomcoupl_
TVar::ResonancePropagatorScheme
ResonancePropagatorScheme
Definition: TVar.hh:117
TVar::Had_WH_S
@ Had_WH_S
Definition: TVar.hh:87
TVar::JJEW
@ JJEW
Definition: TVar.hh:73
gHIGGS_Vp_Bot_left
@ gHIGGS_Vp_Bot_left
Definition: raw_couplings.txt:95
TVar::bkgZZ_SMHiggs
@ bkgZZ_SMHiggs
Definition: TVar.hh:170
TVar::bkgZZ
@ bkgZZ
Definition: TVar.hh:166
TVar::SMSyst_ScaleDown
@ SMSyst_ScaleDown
Definition: TVar.hh:191
TVar::InterfOn
@ InterfOn
Definition: TVar.hh:108
gGRAVITON_ZA_1
@ gGRAVITON_ZA_1
Definition: raw_couplings.txt:146
gGRAVITON_GG_1
@ gGRAVITON_GG_1
Definition: raw_couplings.txt:125
TVar::Had_WH_TU
@ Had_WH_TU
Definition: TVar.hh:98
Mela.h
This is the "MELA" object that interfaces with the Fortran code in both MCFM-JHUGen and pure JHUGen.
TVar::H0_Zgs
@ H0_Zgs
Definition: TVar.hh:131
TVar::ttH
@ ttH
Definition: TVar.hh:66
global_mela_list
vector< unique_ptr< MELAwithOptions > > global_mela_list
Definition: testME_v2.c:40
TVar::SelfDefine_spin0
@ SelfDefine_spin0
Definition: TVar.hh:180
testME_Dec_JHUGen_Ping
void testME_Dec_JHUGen_Ping(int erg_tev=13, bool useConstants=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:2175
gHIGGS_ZA_4
@ gHIGGS_ZA_4
Definition: raw_couplings.txt:16
MELAwithOptions::sqrts
const double sqrts
Definition: testME_v2.c:28
MELAwithOptions::mela
Mela * mela
Definition: testME_v2.c:27
TVar::ANALYTICAL
@ ANALYTICAL
Definition: TVar.hh:58
gHIGGS_Vp_Str_right
@ gHIGGS_Vp_Str_right
Definition: raw_couplings.txt:92
TVar::Lep_ZH
@ Lep_ZH
Definition: TVar.hh:77
TVar::SMSyst_ScaleUp
@ SMSyst_ScaleUp
Definition: TVar.hh:190
testME_ProdDec_MCFM_Ordering
void testME_ProdDec_MCFM_Ordering(int iSel, int jSel, int rSel, int sSel)
Definition: testME_v2.c:3147
gHIGGS_Vp_Ta_left
@ gHIGGS_Vp_Ta_left
Definition: raw_couplings.txt:82
gHIGGS_VV_1
@ gHIGGS_VV_1
Definition: raw_couplings.txt:9
gHIGGS_Vp_Str_left
@ gHIGGS_Vp_Str_left
Definition: raw_couplings.txt:91
MELACandidate
Definition: MELACandidate.h:7
TVar::DEBUG
@ DEBUG
Definition: TVar.hh:51
SimpleParticleCollection_t
std::vector< SimpleParticle_t > SimpleParticleCollection_t
Definition: TVar.hh:25
gHIGGS_Vp_El_left
@ gHIGGS_Vp_El_left
Definition: raw_couplings.txt:78
modvhiggs::propagator
complex(8) function propagator(inv_mass, mass, width)
Definition: mod_VHiggs.F90:1357
gHIGGS_Vp_Bot_right
@ gHIGGS_Vp_Bot_right
Definition: raw_couplings.txt:96
TVar::Had_WH
@ Had_WH
Definition: TVar.hh:76
gHIGGS_Vp_Ta_right
@ gHIGGS_Vp_Ta_right
Definition: raw_couplings.txt:83
sqrts
double sqrts
Definition: TMCFM.hh:290
TVar::JJEW_TU
@ JJEW_TU
Definition: TVar.hh:95
MELAParticle::id
int id
Definition: MELAParticle.h:17
TVar::Production
Production
Definition: TVar.hh:60
testME_ProdDec_MCFM_JHUGen_JJQCDZZWW_Comparison_Ping
void testME_ProdDec_MCFM_JHUGen_JJQCDZZWW_Comparison_Ping(int motherflavor=0, int decZZWW=1, int hasInterf=0, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:4902
TMCFMUtils::AssociatedParticleOrdering_QQVVQQAny
void AssociatedParticleOrdering_QQVVQQAny(int iSel, int jSel, int rSel, int sSel, int order[2])
Definition: TMCFMUtils.cc:18
TVar::JJVBF_S
@ JJVBF_S
Definition: TVar.hh:83
TVar::Lep_WH
@ Lep_WH
Definition: TVar.hh:78
TUtil::computeVBFAngles
void computeVBFAngles(float &costhetastar, float &costheta1, float &costheta2, float &Phi, float &Phi1, float &Q2V1, float &Q2V2, TLorentzVector p4M11, int Z1_lept1Id, TLorentzVector p4M12, int Z1_lept2Id, TLorentzVector p4M21, int Z2_lept1Id, TLorentzVector p4M22, int Z2_lept2Id, TLorentzVector jet1, int jet1Id, TLorentzVector jet2, int jet2Id, TLorentzVector *injet1=0, int injet1Id=0, TLorentzVector *injet2=0, int injet2Id=0)
Definition: TUtil.cc:596
MELAwithOptions::mh
const double mh
Definition: testME_v2.c:29
gHIGGS_VV_2
@ gHIGGS_VV_2
Definition: raw_couplings.txt:10
xw
double xw
Definition: TMCFM.hh:113
testME_all.melaptr
melaptr
Definition: testME_all.py:53
TVar::H0hplus
@ H0hplus
Definition: TVar.hh:128
gHIGGS_KAPPA
@ gHIGGS_KAPPA
Definition: raw_couplings.txt:2
TVar::bbH
@ bbH
Definition: TVar.hh:67
MELAwithOptions::~MELAwithOptions
~MELAwithOptions()
Definition: testME_v2.c:37
getMela
Mela * getMela(double sqrts, double mh, TVar::VerbosityLevel verbosity=TVar::ERROR)
Definition: testME_v2.c:42
PDGHelpers::isAJet
bool isAJet(const int id)
Definition: PDGHelpers.cc:18
TVar::Lep_ZH_TU
@ Lep_ZH_TU
Definition: TVar.hh:99
testME_Dec_FullSim
void testME_Dec_FullSim(int flavor=2, bool useConstants=false, bool useBkgSample=false, shared_ptr< Mela > melaptr=nullptr)
Definition: testME_v2.c:7473
gHIGGS_ZA_1_PRIME2
@ gHIGGS_ZA_1_PRIME2
Definition: raw_couplings.txt:46
TVar::CandidateDecay_GG
@ CandidateDecay_GG
Definition: TVar.hh:45