ATLAS Offline Software
Prophecy4fMerger.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "Prophecy4fMerger.h"
5 #include "TLorentzRotation.h"
6 #include "TLorentzVector.h"
7 #include "TVector3.h"
8 /* Utils */
9 #include "Pythia8/LHEF3.h"
10 namespace LHEF {
13 }
14 #include <string>
15 #include <iostream>
17 
18 using namespace asg::msgUserCode;
19 
20 Prophecy4fMerger::Prophecy4fMerger() : m_phEvent(false), m_debug(false), m_rand(0) {
21 }
22 
24 }
25 
26 void Prophecy4fMerger::setRandomSeed(unsigned long long seed)
27 {
28  m_rand.SetSeed(seed);
29  ANA_MSG_INFO("Prophecy4fMerger::setRandomSeed: set random seed to " << seed << ".");
30 }
31 
32 int Prophecy4fMerger::alulb4(double *ps, double *pi, double *pf){
33 
34  // transform pi rest to lab frame of ps - output pf
35  // For description, see LOREN4 doc in CERNLIB
36 
37  if(ps[3] == ps[4]){
38  pf[0] = pi[0];
39  pf[1] = pi[1];
40  pf[2] = pi[2];
41  pf[3] = pi[3];
42  }
43  else{
44  const double pf4 = (pi[0] * ps[0] + pi[1] * ps[1] + pi[2] * ps[2] + pi[3] * ps[3]) / ps[4];
45  const double fn = (pf4 + pi[3]) / (ps[3] + ps[4]);
46  pf[0] = pi[0] + fn * ps[0];
47  pf[1] = pi[1] + fn * ps[1];
48  pf[2] = pi[2] + fn * ps[2];
49  pf[3] = pf4;
50  }
51  return 0;
52 
53 }
54 
55 int Prophecy4fMerger::alulf4(double *ps, double *pi, double *pf){
56 
57  // transform pi lab to rest frame of ps - output pf
58  // For description, see LOREN4 doc in CERNLIB
59 
60  if(ps[3] == ps[4]){
61  pf[0] = pi[0];
62  pf[1] = pi[1];
63  pf[2] = pi[2];
64  pf[3] = pi[3];
65  }
66  else{
67  const double pf4 = (pi[3] * ps[3] - pi[2] * ps[2] - pi[1] * ps[1] - pi[0] * ps[0]) / ps[4];
68  const double fn = (pf4 + pi[3]) / (ps[3] + ps[4]);
69  pf[0] = pi[0] - fn * ps[0];
70  pf[1] = pi[1] - fn * ps[1];
71  pf[2] = pi[2] - fn * ps[2];
72  pf[3] = pf4;
73  }
74  return 0;
75 
76 }
77 
78 int Prophecy4fMerger::alulob(double *ps, double *pi, double *pf){
79 
80  //extern int alulb4(double *, double *, double *);
81 
82  alulb4(ps, pi, pf);
83  pf[4] = pi[4];
84  return 0;
85 
86 }
87 
88 int Prophecy4fMerger::alulof(double *ps, double *pi, double *pf){
89 
90  //extern int alulf4(double *, double *, double *);
91 
92  alulf4(ps, pi, pf);
93  pf[4] = pi[4];
94 
95  return 0;
96 
97 }
98 
99 double Prophecy4fMerger::alupcm(double em0, double em1, double em2){
100 
101  // calculate the momentum of particles 1 and 2 in the rest frame of 0 given the three masses
102 
103  double ret_val;
104 
105  //ems = abs(em1 + em2);
106  //emd = abs(em1 - em2);
107  double ems = (em1 + em2);
108  if(ems < 0){
109  ems=-(em1 + em2);
110  }
111  double emd = (em1 - em2);
112  if(emd < 0){
113  emd = -(em1 - em2);
114  }
115 
116  if(em0 < ems || em0 < emd){
117  ret_val = -1.f;
118  }
119  else if(em0 == ems || em0 == emd){
120  ret_val = 0.f;
121  }
122  else{
123  ret_val = sqrt((em0 + emd) * (em0 - emd) * (em0 + ems) * (em0 - ems)) * .5f / em0;
124  }
125  return ret_val;
126 
127 }
128 
129 int Prophecy4fMerger::rescms(double *p, double *p1, double *p2, double m1, double m2){
130 
131  // p1 and p2 are the four-vector decay products of p. Here we change the masses of p1 and p2 to be
132  // m1 and m2. Note that for Prophecy, the masses in p1 and p2 are zero.
133 
134  double po1[5], po2[5], pcm, pcmo;
135 
136  const double m = p[4];
137  const double mo1 = p1[4];
138  const double mo2 = p2[4];
139 
140  // transform p1 to po1 to be in rest frame of p, sampe for p2
141  alulof(p, p1, po1);
142  alulof(p, p2, po2);
143 
144  // Calculate the momentum of p1/p2 in the rest frame of p (po1/po2) for the original mass and new
145  // masses, and then rescale the rest frame momenta po1 and po2. (Note: eo1 = eo2 in cms of p, so
146  // po1 and po2 in cms of p change according to e^2 - m^2 as m changes.)
147  if (std::max(mo1,mo2) < 1e-6){
148  pcmo = m / 2.;
149  }
150  else{
151  pcmo = alupcm(m, mo1, mo2);
152  }
153  pcm = alupcm(m, m1, m2);
154 
155  //rescale the cms momenta, po1 and po2, to account for the new masses used
156  for (int il = 0; il < 4; il++) {
157  po1[il] = pcm / pcmo * po1[il];
158  po2[il] = pcm / pcmo * po2[il];
159  }
160 
161  //set energy and mass
162  po1[3] = sqrt(pcm*pcm + m1*m1);
163  po2[3] = sqrt(pcm*pcm + m2*m2);
164  po1[4] = m1;
165  po2[4] = m2;
166 
167  //boost back
168  alulob(p, po1, p1);
169  alulob(p, po2, p2);
170 
171  return 0;
172 
173 }
174 
175 void Prophecy4fMerger::setIO(const std::string& powheg,
176  const std::string& prophecy4e,
177  const std::string& prophecy4mu,
178  const std::string& prophecy2e2mu,
179  const std::string& outlhe,
180  bool debug)
181 {
182  m_inPowheg = powheg;
183  m_inProphecy4e = prophecy4e;
184  m_inProphecy4mu = prophecy4mu;
185  m_inProphecy2e2mu = prophecy2e2mu;
186  m_outLHE = outlhe;
187  m_phEvent = false;
188  m_debug = debug;
189 
190 }
191 
193 
194  print(" Opening Powheg LHE file ... " + m_inPowheg);
195  if( !fileExists(m_inPowheg) ){
196  ANA_MSG_ERROR("Input Powheg LHE not Found!"
197  << " Aborting ... ");
198  return;
199  }
200  LHEF::Reader readH( m_inPowheg.c_str() );
201 
202  print(" Opening Prophecy4f LHE file for 4e ... " + m_inProphecy4e);
203  if( !fileExists(m_inProphecy4e) ){
204  ANA_MSG_INFO( "Input Prophecy4f for 4e LHE not Found! " << m_inProphecy4e
205  << " Aborting ... " );
206  return;
207  }
208  LHEF::Reader read4e( m_inProphecy4e.c_str() );
209 
210  print(" Opening Prophecy4f LHE file for 4mu ... " + m_inProphecy4mu);
211  if( !fileExists(m_inProphecy4mu) ){
212  ANA_MSG_ERROR("Input Prophecy4f for 4mu LHE not Found! " << m_inProphecy4mu
213  << " Aborting ... ");
214  return;
215  }
216  LHEF::Reader read4mu( m_inProphecy4mu.c_str() );
217 
218  print(" Opening Prophecy4f for 2e2mu LHE file ... " + m_inProphecy2e2mu);
220  ANA_MSG_ERROR("Input Prophecy4f for 2e2mu LHE not Found! " << m_inProphecy2e2mu
221  << " Aborting ... ");
222  return;
223  }
224  LHEF::Reader read2e2mu( m_inProphecy2e2mu.c_str() );
225 
226  print(" Opening Out LHE file ... " + m_outLHE);
227  LHEF::Writer writeLHE( m_outLHE.c_str() );
228 
229  writeLHE.headerBlock() << readH.headerBlock;
230  writeLHE.initComments() << readH.initComments;
231  writeLHE.heprup = readH.heprup;
232  writeLHE.init();
233 
234  long neve = 0;
235  LHEF::Reader* read4f = 0;
236 
237 
238  // Read in each Higgs event and one Prophecy4f event, merge them and write out the merged event
239  // randomly chose between 4mu, 4e, 2mu2e and 2e2mu. Note that 2mu2e is always taken as 2e2mu,
240  // since it is generated this way.
241 
242  while( readH.readEvent() ){
243  // randomly choose between 4mu, 4e, 2mu2e and 2e2mu
244  int ID_l[4] = {-999, -999, -999, -999};
245  int decayModeType = 4.0 * m_rand.Rndm();
246 
247  if (decayModeType == 0){
248  //4e
249  read4f = &read4e;
250  for(int i = 0; i < 4; i++) ID_l[i] = m_electronID;
251  }
252  else if (decayModeType == 1 || decayModeType == 2){
253  //2e2mu
254  read4f = &read2e2mu;
255  for(int i = 0; i < 2; i++) ID_l[i] = m_electronID;
256  for(int i = 2; i < 4; i++) ID_l[i] = m_muonID;
257  }
258  else {
259  //4mu
260  read4f = &read4mu;
261  for(int i = 0; i < 4; i++) ID_l[i] = m_muonID;
262  }
263 
264  if( !read4f->readEvent() ){
265  ANA_MSG_INFO("Still Powheg events but no more Prophecy4f ");
266  ANA_MSG_INFO("events! Writing out LHE file ... Events processed so far " << neve );
267  break;
268  }
269 
270  ++neve;
271  if(neve%1000==0){
272  print("Events processed so far ", neve);
273  }
274  if( readH.outsideBlock.length() )
275  ANA_MSG_INFO( readH.outsideBlock );
276 
277  int nup_org=readH.hepeup.NUP;
278 
279  for(int nup=0; nup<nup_org; nup++){
280  if(readH.hepeup.IDUP[nup]==m_higgsID)
281  readH.hepeup.ISTUP[nup]=2; // set Higgs status code to 2
282  }
283  writeLHE.hepeup = readH.hepeup;
284 
285  double P4_Z[5][2] = {{0}}; // momentum and mass of Zi i=1,2 set to 0 P4_Z[5] = (px, py, pz, E, mZ)
286  double P4_l[5][5];
287 
288  double Pph[5] = {-999., -999., -999., -999., -999.};
289  double daughter2[5][5];
290 
291  for(int i=0; i<nup_org; i++){
292  if(readH.hepeup.IDUP[i]==m_higgsID) {
293  TLorentzVector higgs( readH.hepeup.PUP[i][0],
294  readH.hepeup.PUP[i][1],
295  readH.hepeup.PUP[i][2],
296  readH.hepeup.PUP[i][3] );
297 
298  TVector3 boostvec = higgs.BoostVector();
299  TLorentzRotation boost(-boostvec);
300  TLorentzRotation backboost(boostvec);
301 
302  /* boost to Higgs rest frame */
303  TLorentzVector r_higgs(higgs);
304  r_higgs*=boost;
305 
306  /* Here add daughter particles to Higgs in rest
307  boost back with backboost */
308  writeLHE.hepeup.resize(nup_org+read4f->hepeup.NUP);
309 
310  TLorentzVector sum_daughter;
311  TLorentzVector sum_daughter_rest;
312  TLorentzVector sum_daughter_rest_init;
313 
314  for(int k=0; k<read4f->hepeup.NUP; k++){
315  TLorentzVector daughter(read4f->hepeup.PUP[k][0],
316  read4f->hepeup.PUP[k][1],
317  read4f->hepeup.PUP[k][2],
318  read4f->hepeup.PUP[k][3]);
319  sum_daughter_rest_init+=daughter;
320  }
321 
322  for(int j=0; j<read4f->hepeup.NUP; j++){
323  TLorentzVector daughter(read4f->hepeup.PUP[j][0],
324  read4f->hepeup.PUP[j][1],
325  read4f->hepeup.PUP[j][2],
326  read4f->hepeup.PUP[j][3]);
327  sum_daughter_rest+=daughter;
328 
329  daughter *= backboost;
330  daughter *= higgs.M()/sum_daughter_rest_init.M();
331 
332  /* POWHEG event with Higgs off-mass shell */
333  m_phEvent=isPHevent(higgs,sum_daughter_rest_init);
334  if( m_phEvent ){
335  break;
336  }
337 
338  sum_daughter+=daughter;
339 
340  if( std::abs(read4f->hepeup.IDUP[j])==m_electronID ||
341  std::abs(read4f->hepeup.IDUP[j])==m_muonID ){
342 
343  //ID_l[j] = read4f->hepeup.IDUP[j];
344  P4_l[0][j] = daughter.Px();
345  P4_l[1][j] = daughter.Py();
346  P4_l[2][j] = daughter.Pz();
347  P4_l[3][j] = daughter.E();
348 
349  }
350  else if( std::abs(read4f->hepeup.IDUP[j])==m_photonID ){
351  Pph[0] = daughter.Px();
352  Pph[1] = daughter.Py();
353  Pph[2] = daughter.Pz();
354  Pph[3] = daughter.E();
355  Pph[4] =0.0;
356  }
357  }
358 
359  for(int n=0; n<4; n++){
360  if( std::abs(ID_l[n])==m_electronID ||
361  std::abs(ID_l[n])==m_muonID ) {
362 
363  // Z1 -> l1 + l2 and Z2 -> l3 + l4
364  P4_Z[n][0] = P4_l[n][0] + P4_l[n][1];
365  P4_Z[n][1] = P4_l[n][2] + P4_l[n][3];
366  }
367  }
368 
369  double mass1, mass2;
370  P4_Z[4][0] = sqrt(P4_Z[3][0] * P4_Z[3][0] - P4_Z[0][0] * P4_Z[0][0] - P4_Z[1][0] * P4_Z[1][0] - P4_Z[2][0] * P4_Z[2][0]);
371  P4_Z[4][1] = sqrt(P4_Z[3][1] * P4_Z[3][1] - P4_Z[0][1] * P4_Z[0][1] - P4_Z[1][1] * P4_Z[1][1] - P4_Z[2][1] * P4_Z[2][1]);
372  mass1 = setParticleMass(ID_l[0]);
373  mass2 = setParticleMass(ID_l[2]);
374 
375  double p1[5], p2[5], pZ1[5], p3[5], p4[5], pZ2[5];
376  for(int u=0; u<5; u++){
377 
378  pZ1[u] = P4_Z[u][0];
379  p1[u] = P4_l[u][0];
380  p2[u] = P4_l[u][1];
381  pZ2[u] = P4_Z[u][1];
382  p3[u] = P4_l[u][2];
383  p4[u] = P4_l[u][3];
384 
385  }
386 
387  p1[4] = 0.0;
388  p2[4] = 0.0;
389  p3[4] = 0.0;
390  p4[4] = 0.0;
391 
392  // Give masses to the leptons using Alpgen/FHerwig routines
393  // Note: prophecy leptons are generated massless
394  rescms(pZ1, p1, p2, mass1, mass1);
395  rescms(pZ2, p3, p4, mass2, mass2);
396 
397  for(int d =0; d<5; d++){
398  daughter2[0][d] = p1[d];
399  daughter2[1][d] = p2[d];
400  daughter2[2][d] = p3[d];
401  daughter2[3][d] = p4[d];
402  daughter2[4][d] = Pph[d];
403  }
404 
405  // print out children
406  bool doDebug = false;
407  doDebug = true;
408  if (doDebug) {
409 
410  ANA_MSG_DEBUG("Event: " << neve);
411  ANA_MSG_DEBUG(" Higgs and children, m, pt, eta, phi" );
412  ANA_MSG_DEBUG("Higgs " << higgs.M() << ", " << higgs.Pt() << "," << higgs.Eta() << "," << higgs.Phi());
413 
414 
415  TLorentzVector higgsFromChildren;
416  for(int d =0; d < read4f->hepeup.NUP; d++){
417  TLorentzVector child;
418  child.SetXYZM( daughter2[d][0],
419  daughter2[d][1],
420  daughter2[d][2],
421  daughter2[d][4] );
422 
423  ANA_MSG_DEBUG("child " << d << " " << child.M() << ", " << child.Pt() << ", " << child.Eta() << ", " << child.Phi());
424  higgsFromChildren += child;
425  }
426  ANA_MSG_DEBUG("Higgs mass " << higgs.M() << ", from children " << higgsFromChildren.M() << ", diff " << higgs.M() - higgsFromChildren.M());
427  }
428  break;
429  }
430  }
431 
432  /* Write LHE */
433  if(m_phEvent){
434  writeLHE.hepeup = readH.hepeup;
435  }
436  else{
437 
438  for(int jp=0; jp<read4f->hepeup.NUP; jp++){
439  if (jp < 4){
440  writeLHE.hepeup.IDUP[nup_org+jp] = (jp % 2 == 0)? ID_l[jp] : -ID_l[jp];
441 
442  }
443  else{
444  writeLHE.hepeup.IDUP[nup_org+jp] = read4f->hepeup.IDUP[jp];
445  }
446 
447  writeLHE.hepeup.ISTUP[nup_org+jp]=read4f->hepeup.ISTUP[jp];
448  if( read4f->hepeup.ICOLUP[jp].first==0 &&
449  read4f->hepeup.ICOLUP[jp].second==0 ) {
450  writeLHE.hepeup.ICOLUP[nup_org+jp].first=0;
451  writeLHE.hepeup.ICOLUP[nup_org+jp].second=0;
452  }
453  else {
454  writeLHE.hepeup.ICOLUP[nup_org+jp].first=read4f->hepeup.ICOLUP[jp].first+100;
455  writeLHE.hepeup.ICOLUP[nup_org+jp].second=read4f->hepeup.ICOLUP[jp].second+100;
456  }
457  writeLHE.hepeup.MOTHUP[nup_org+jp].first=3;//i-1;
458  writeLHE.hepeup.MOTHUP[nup_org+jp].second=3;//i-1;
459  writeLHE.hepeup.PUP[nup_org+jp][0]=daughter2[jp][0];
460  writeLHE.hepeup.PUP[nup_org+jp][1]=daughter2[jp][1];
461  writeLHE.hepeup.PUP[nup_org+jp][2]=daughter2[jp][2];
462  writeLHE.hepeup.PUP[nup_org+jp][3]=daughter2[jp][3];
463  writeLHE.hepeup.PUP[nup_org+jp][4]=daughter2[jp][4];
464  writeLHE.hepeup.VTIMUP[nup_org+jp]=read4f->hepeup.VTIMUP[jp];
465  writeLHE.hepeup.SPINUP[nup_org+jp]=read4f->hepeup.SPINUP[jp];
466  }
467  }
468 
469  // set powheg weights to negative, if prophecy weight is -1
470 
471  // Get Prophecy4f weight
472  writeLHE.hepeup.XWGTUP *= read4f->hepeup.XWGTUP;
473  double prophecyWeight = read4f->hepeup.XWGTUP;
474  if ( writeLHE.hepeup.weights_compressed.size() > 0 ) {
475  for ( int i = 1, N = writeLHE.hepeup.weights_compressed.size(); i < N; ++i ) {
476  writeLHE.hepeup.weights_compressed[i] *= prophecyWeight;
477 
478  }
479  }
480 
481  writeLHE.eventComments() << readH.eventComments;
482  writeLHE.writeEvent();
483  }
484 }
485 
486 bool Prophecy4fMerger::isPHevent(const TLorentzVector& higgs,
487  const TLorentzVector& sum_daugh_rest_init){
488 
489  if( std::abs(higgs.M()-sum_daugh_rest_init.M())>m_deltaM ){
490  ANA_MSG_INFO("POWHEG event with Higgs off-mass shell: " << higgs.M() << " GeV");
491  return true;
492  }
493  return false;
494 
495 }
496 
497 
498 double Prophecy4fMerger::setParticleMass(int id) const {
499 
500  double mass = 0.0;
501 
502  if( std::abs(id) == m_neutrinoEl ||
503  std::abs(id) == m_neutrinoMu ||
504  std::abs(id) == m_neutrinoTau ){
505  mass = 0.0;
506  }
507  else if( std::abs(id) == m_electronID ){
509  }
510  else if( std::abs(id) == m_muonID ){
511  mass = m_muonMass;
512  }
513  else if( std::abs(id) == m_tauID ){
514  mass = m_tauMass;
515  }
516 
517  return mass;
518 
519 }
520 
521 bool Prophecy4fMerger::fileExists(const std::string& filename){
522 
523  std::ifstream ifile(filename.c_str());
524  if( ifile.good() ){
525  ifile.close();
526  return true;
527  }
528  ifile.close();
529  return false;
530 
531 }
532 
533 void Prophecy4fMerger::print(const std::string& field){
534  if(m_debug){
536  }
537 }
538 
539 void Prophecy4fMerger::print(const std::string& field,
540  int value){
541 
542  if(m_debug){
543  ANA_MSG_DEBUG("DEBUG:: " << value << " " << field);
544  }
545 
546 }
547 
Prophecy4fMerger::m_inProphecy4mu
std::string m_inProphecy4mu
Definition: Prophecy4fMerger.h:104
PlotCalibFromCool.il
il
Definition: PlotCalibFromCool.py:381
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
Prophecy4fMerger::alulb4
int alulb4(double *ps, double *pi, double *pf)
Definition: Prophecy4fMerger.cxx:32
Prophecy4fMerger::setRandomSeed
void setRandomSeed(unsigned long long seed)
Definition: Prophecy4fMerger.cxx:26
python.SystemOfUnits.m2
int m2
Definition: SystemOfUnits.py:92
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
Prophecy4fMerger::m_tauMass
static constexpr double m_tauMass
Definition: Prophecy4fMerger.h:113
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
Prophecy4fMerger::alupcm
double alupcm(double em0, double em1, double em2)
Definition: Prophecy4fMerger.cxx:99
hist_file_dump.d
d
Definition: hist_file_dump.py:137
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
Prophecy4fMerger::merge
void merge()
Definition: Prophecy4fMerger.cxx:192
Prophecy4fMerger::setIO
void setIO(const std::string &powheg, const std::string &prophecy4e, const std::string &prophecy4mu, const std::string &prophecy2e2mu, const std::string &outlhe, bool debug)
Definition: Prophecy4fMerger.cxx:175
Prophecy4fMerger::m_muonMass
static constexpr double m_muonMass
Definition: Prophecy4fMerger.h:111
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
Prophecy4fMerger::alulof
int alulof(double *ps, double *pi, double *pf)
Definition: Prophecy4fMerger.cxx:88
ANA_MSG_ERROR
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:294
athena.value
value
Definition: athena.py:124
Prophecy4fMerger::m_tauID
static const long m_tauID
Definition: Prophecy4fMerger.h:116
Prophecy4fMerger::setParticleMass
double setParticleMass(int id) const
Definition: Prophecy4fMerger.cxx:498
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
boost
Definition: DVLIterator.h:29
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
Prophecy4fMerger::m_muonID
static const long m_muonID
Definition: Prophecy4fMerger.h:115
Prophecy4fMerger::m_inProphecy4e
std::string m_inProphecy4e
Definition: Prophecy4fMerger.h:103
Prophecy4fMerger::m_rand
TRandom3 m_rand
Definition: Prophecy4fMerger.h:109
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
Prophecy4fMerger::m_neutrinoTau
static const long m_neutrinoTau
Definition: Prophecy4fMerger.h:122
Prophecy4fMerger::isPHevent
bool isPHevent(const TLorentzVector &higgs, const TLorentzVector &sum_daugh_rest_init)
Definition: Prophecy4fMerger.cxx:486
pi
#define pi
Definition: TileMuonFitter.cxx:65
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
Prophecy4fMerger::m_phEvent
bool m_phEvent
Definition: Prophecy4fMerger.h:107
Prophecy4fMerger::fileExists
bool fileExists(const std::string &filename)
Definition: Prophecy4fMerger.cxx:521
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
python.getCurrentFolderTag.fn
fn
Definition: getCurrentFolderTag.py:65
python.changerun.m1
m1
Definition: changerun.py:32
Prophecy4fMerger::rescms
int rescms(double *p, double *p1, double *p2, double m1, double m2)
Definition: Prophecy4fMerger.cxx:129
lumiFormat.i
int i
Definition: lumiFormat.py:85
beamspotman.n
n
Definition: beamspotman.py:731
Prophecy4fMerger::print
void print(const std::string &field)
Definition: Prophecy4fMerger.cxx:533
Prophecy4fMerger::m_debug
bool m_debug
Definition: Prophecy4fMerger.h:108
ANA_MSG_INFO
#define ANA_MSG_INFO(xmsg)
Macro printing info messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:290
Prophecy4fMerger::m_inProphecy2e2mu
std::string m_inProphecy2e2mu
Definition: Prophecy4fMerger.h:105
MessageCheck.h
macros for messaging and checking status codes
Prophecy4fMerger::alulob
int alulob(double *ps, double *pi, double *pf)
Definition: Prophecy4fMerger.cxx:78
LHEF::Reader
Pythia8::Reader Reader
Definition: Prophecy4fMerger.cxx:11
Prophecy4fMerger::m_photonID
static const long m_photonID
Definition: Prophecy4fMerger.h:119
Prophecy4fMerger::m_deltaM
static constexpr double m_deltaM
Definition: Prophecy4fMerger.h:110
Prophecy4fMerger::m_neutrinoMu
static const long m_neutrinoMu
Definition: Prophecy4fMerger.h:121
Prophecy4fMerger.h
Prophecy4fMerger::m_neutrinoEl
static const long m_neutrinoEl
Definition: Prophecy4fMerger.h:120
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
Prophecy4fMerger::m_higgsID
static const long m_higgsID
Definition: Prophecy4fMerger.h:118
Prophecy4fMerger::~Prophecy4fMerger
virtual ~Prophecy4fMerger()
Definition: Prophecy4fMerger.cxx:23
Prophecy4fMerger::m_electronID
static const long m_electronID
Definition: Prophecy4fMerger.h:114
Prophecy4fMerger::m_inPowheg
std::string m_inPowheg
Definition: Prophecy4fMerger.h:102
python.output.AtlRunQueryRoot.pf
pf
Definition: AtlRunQueryRoot.py:988
Prophecy4fMerger::Prophecy4fMerger
Prophecy4fMerger()
Definition: Prophecy4fMerger.cxx:20
Prophecy4fMerger::m_outLHE
std::string m_outLHE
Definition: Prophecy4fMerger.h:106
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
Prophecy4fMerger::m_electronMass
static constexpr double m_electronMass
Definition: Prophecy4fMerger.h:112
LArCellNtuple.ifile
string ifile
Definition: LArCellNtuple.py:133
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
TRTCalib_cfilter.p3
p3
Definition: TRTCalib_cfilter.py:132
Prophecy4fMerger::alulf4
int alulf4(double *ps, double *pi, double *pf)
Definition: Prophecy4fMerger.cxx:55
LHEF
Definition: Prophecy4fMerger.cxx:10
fitman.k
k
Definition: fitman.py:528
ANA_MSG_DEBUG
#define ANA_MSG_DEBUG(xmsg)
Macro printing debug messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:288