~sebastien-wertz/mg5amcnlo/standalone_cpp_mem

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/IOExportStandaloneCPPMEMTest/MultiProcessTest/src/HelAmps_sm.cc

  • Committer: Sébastien Wertz
  • Date: 2015-10-30 14:14:25 UTC
  • Revision ID: swertz@ingrid-ui1-20151030141425-0ymwh93fx6xhcrfs
Finished IOTest, small corrections to exporter

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//==========================================================================
2
 
// This file has been automatically generated for C++ Standalone by
3
 
// MadGraph5_aMC@NLO v. 2.3.3, 2015-10-25
4
 
// By the MadGraph5_aMC@NLO Development Team
5
 
// Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
6
 
//==========================================================================
7
 
 
8
 
#include "HelAmps_sm.h"
9
 
#include <complex> 
10
 
#include <cmath> 
11
 
#include <iostream> 
12
 
#include <cstdlib> 
13
 
using namespace std; 
14
 
 
15
 
namespace MG5_sm 
16
 
{
17
 
 
18
 
 
19
 
double Sgn(double a, double b)
20
 
{
21
 
  return (b < 0)? - abs(a):abs(a); 
22
 
}
23
 
 
24
 
void ixxxxx(double p[4], double fmass, int nhel, int nsf, complex<double> fi[6])
25
 
{
26
 
  complex<double> chi[2]; 
27
 
  double sf[2], sfomega[2], omega[2], pp, pp3, sqp0p3, sqm[2]; 
28
 
  int ip, im, nh; 
29
 
  fi[0] = complex<double> (-p[0] * nsf, -p[3] * nsf); 
30
 
  fi[1] = complex<double> (-p[1] * nsf, -p[2] * nsf); 
31
 
  nh = nhel * nsf; 
32
 
  if (fmass != 0.0)
33
 
  {
34
 
    pp = min(p[0], sqrt(p[1] * p[1] + p[2] * p[2] + p[3] * p[3])); 
35
 
    if (pp == 0.0)
36
 
    {
37
 
      sqm[0] = sqrt(abs(fmass)); 
38
 
      sqm[1] = Sgn(sqm[0], fmass); 
39
 
      ip = (1 + nh)/2; 
40
 
      im = (1 - nh)/2; 
41
 
      fi[2] = ip * sqm[ip]; 
42
 
      fi[3] = im * nsf * sqm[ip]; 
43
 
      fi[4] = ip * nsf * sqm[im]; 
44
 
      fi[5] = im * sqm[im]; 
45
 
    }
46
 
    else
47
 
    {
48
 
      sf[0] = (1 + nsf + (1 - nsf) * nh) * 0.5; 
49
 
      sf[1] = (1 + nsf - (1 - nsf) * nh) * 0.5; 
50
 
      omega[0] = sqrt(p[0] + pp); 
51
 
      omega[1] = fmass/omega[0]; 
52
 
      ip = (1 + nh)/2; 
53
 
      im = (1 - nh)/2; 
54
 
      sfomega[0] = sf[0] * omega[ip]; 
55
 
      sfomega[1] = sf[1] * omega[im]; 
56
 
      pp3 = max(pp + p[3], 0.0); 
57
 
      chi[0] = complex<double> (sqrt(pp3 * 0.5/pp), 0); 
58
 
      if (pp3 == 0.0)
59
 
      {
60
 
        chi[1] = complex<double> (-nh, 0); 
61
 
      }
62
 
      else
63
 
      {
64
 
        chi[1] = complex<double> (nh * p[1], p[2])/sqrt(2.0 * pp * pp3); 
65
 
      }
66
 
      fi[2] = sfomega[0] * chi[im]; 
67
 
      fi[3] = sfomega[0] * chi[ip]; 
68
 
      fi[4] = sfomega[1] * chi[im]; 
69
 
      fi[5] = sfomega[1] * chi[ip]; 
70
 
    }
71
 
  }
72
 
  else
73
 
  {
74
 
    if (p[1] == 0.0 and p[2] == 0.0 and p[3] < 0.0)
75
 
    {
76
 
      sqp0p3 = 0.0; 
77
 
    }
78
 
    else
79
 
    {
80
 
      sqp0p3 = sqrt(max(p[0] + p[3], 0.0)) * nsf; 
81
 
    }
82
 
    chi[0] = complex<double> (sqp0p3, 0.0); 
83
 
    if (sqp0p3 == 0.0)
84
 
    {
85
 
      chi[1] = complex<double> (-nhel * sqrt(2.0 * p[0]), 0.0); 
86
 
    }
87
 
    else
88
 
    {
89
 
      chi[1] = complex<double> (nh * p[1], p[2])/sqp0p3; 
90
 
    }
91
 
    if (nh == 1)
92
 
    {
93
 
      fi[2] = complex<double> (0.0, 0.0); 
94
 
      fi[3] = complex<double> (0.0, 0.0); 
95
 
      fi[4] = chi[0]; 
96
 
      fi[5] = chi[1]; 
97
 
    }
98
 
    else
99
 
    {
100
 
      fi[2] = chi[1]; 
101
 
      fi[3] = chi[0]; 
102
 
      fi[4] = complex<double> (0.0, 0.0); 
103
 
      fi[5] = complex<double> (0.0, 0.0); 
104
 
    }
105
 
  }
106
 
  return; 
107
 
}
108
 
 
109
 
 
110
 
void txxxxx(double p[4], double tmass, int nhel, int nst, complex<double>
111
 
    tc[18])
112
 
{
113
 
  complex<double> ft[6][4], ep[4], em[4], e0[4]; 
114
 
  double pt, pt2, pp, pzpt, emp, sqh, sqs; 
115
 
  int i, j; 
116
 
 
117
 
  sqh = sqrt(0.5); 
118
 
  sqs = sqrt(0.5/3); 
119
 
 
120
 
  pt2 = p[1] * p[1] + p[2] * p[2]; 
121
 
  pp = min(p[0], sqrt(pt2 + p[3] * p[3])); 
122
 
  pt = min(pp, sqrt(pt2)); 
123
 
 
124
 
  ft[4][0] = complex<double> (p[0] * nst, p[3] * nst); 
125
 
  ft[5][0] = complex<double> (p[1] * nst, p[2] * nst); 
126
 
 
127
 
  // construct eps+
128
 
  if(nhel >= 0)
129
 
  {
130
 
    if(pp == 0)
131
 
    {
132
 
      ep[0] = complex<double> (0, 0); 
133
 
      ep[1] = complex<double> (-sqh, 0); 
134
 
      ep[2] = complex<double> (0, nst * sqh); 
135
 
      ep[3] = complex<double> (0, 0); 
136
 
    }
137
 
    else
138
 
    {
139
 
      ep[0] = complex<double> (0, 0); 
140
 
      ep[3] = complex<double> (pt/pp * sqh, 0); 
141
 
 
142
 
      if(pt != 0)
143
 
      {
144
 
        pzpt = p[3]/(pp * pt) * sqh; 
145
 
        ep[1] = complex<double> (-p[1] * pzpt, -nst * p[2]/pt * sqh); 
146
 
        ep[2] = complex<double> (-p[2] * pzpt, nst * p[1]/pt * sqh); 
147
 
      }
148
 
      else
149
 
      {
150
 
        ep[1] = complex<double> (-sqh, 0); 
151
 
        ep[2] = complex<double> (0, nst * Sgn(sqh, p[3])); 
152
 
      }
153
 
    }
154
 
 
155
 
  }
156
 
 
157
 
  // construct eps-
158
 
  if(nhel <= 0)
159
 
  {
160
 
    if(pp == 0)
161
 
    {
162
 
      em[0] = complex<double> (0, 0); 
163
 
      em[1] = complex<double> (sqh, 0); 
164
 
      em[2] = complex<double> (0, nst * sqh); 
165
 
      em[3] = complex<double> (0, 0); 
166
 
    }
167
 
    else
168
 
    {
169
 
      em[0] = complex<double> (0, 0); 
170
 
      em[3] = complex<double> (-pt/pp * sqh, 0); 
171
 
 
172
 
      if(pt != 0)
173
 
      {
174
 
        pzpt = -p[3]/(pp * pt) * sqh; 
175
 
        em[1] = complex<double> (-p[1] * pzpt, -nst * p[2]/pt * sqh); 
176
 
        em[2] = complex<double> (-p[2] * pzpt, nst * p[1]/pt * sqh); 
177
 
      }
178
 
      else
179
 
      {
180
 
        em[1] = complex<double> (sqh, 0); 
181
 
        em[2] = complex<double> (0, nst * Sgn(sqh, p[3])); 
182
 
      }
183
 
    }
184
 
  }
185
 
 
186
 
  // construct eps0
187
 
  if(fabs(nhel) <= 1)
188
 
  {
189
 
    if(pp == 0)
190
 
    {
191
 
      e0[0] = complex<double> (0, 0); 
192
 
      e0[1] = complex<double> (0, 0); 
193
 
      e0[2] = complex<double> (0, 0); 
194
 
      e0[3] = complex<double> (1, 0); 
195
 
    }
196
 
    else
197
 
    {
198
 
      emp = p[0]/(tmass * pp); 
199
 
      e0[0] = complex<double> (pp/tmass, 0); 
200
 
      e0[3] = complex<double> (p[3] * emp, 0); 
201
 
 
202
 
      if(pt != 0)
203
 
      {
204
 
        e0[1] = complex<double> (p[1] * emp, 0); 
205
 
        e0[2] = complex<double> (p[2] * emp, 0); 
206
 
      }
207
 
      else
208
 
      {
209
 
        e0[1] = complex<double> (0, 0); 
210
 
        e0[2] = complex<double> (0, 0); 
211
 
      }
212
 
    }
213
 
  }
214
 
 
215
 
  if(nhel == 2)
216
 
  {
217
 
    for(j = 0; j < 4; j++ )
218
 
    {
219
 
      for(i = 0; i < 4; i++ )
220
 
        ft[i][j] = ep[i] * ep[j]; 
221
 
    }
222
 
  }
223
 
  else if(nhel == -2)
224
 
  {
225
 
    for(j = 0; j < 4; j++ )
226
 
    {
227
 
      for(i = 0; i < 4; i++ )
228
 
        ft[i][j] = em[i] * em[j]; 
229
 
    }
230
 
  }
231
 
  else if(tmass == 0)
232
 
  {
233
 
    for(j = 0; j < 4; j++ )
234
 
    {
235
 
      for(i = 0; i < 4; i++ )
236
 
        ft[i][j] = 0; 
237
 
    }
238
 
  }
239
 
  else if(tmass != 0)
240
 
  {
241
 
    if(nhel == 1)
242
 
    {
243
 
      for(j = 0; j < 4; j++ )
244
 
      {
245
 
        for(i = 0; i < 4; i++ )
246
 
          ft[i][j] = sqh * (ep[i] * e0[j] + e0[i] * ep[j]); 
247
 
      }
248
 
    }
249
 
    else if(nhel == 0)
250
 
    {
251
 
      for(j = 0; j < 4; j++ )
252
 
      {
253
 
        for(i = 0; i < 4; i++ )
254
 
          ft[i][j] = sqs * (ep[i] * em[j] + em[i] * ep[j]
255
 
         + 2.0 * e0[i] * e0[j]); 
256
 
      }
257
 
    }
258
 
    else if(nhel == -1)
259
 
    {
260
 
      for(j = 0; j < 4; j++ )
261
 
      {
262
 
        for(i = 0; i < 4; i++ )
263
 
          ft[i][j] = sqh * (em[i] * e0[j] + e0[i] * em[j]); 
264
 
      }
265
 
    }
266
 
    else
267
 
    {
268
 
      std::cerr <<  "Invalid helicity in txxxxx.\n"; 
269
 
      std::exit(1); 
270
 
    }
271
 
  }
272
 
 
273
 
  tc[0] = ft[4][0]; 
274
 
  tc[1] = ft[5][0]; 
275
 
 
276
 
  for(j = 0; j < 4; j++ )
277
 
  {
278
 
    for(i = 0; i < 4; i++ )
279
 
      tc[j * 4 + i + 2] = ft[j][i]; 
280
 
  }
281
 
}
282
 
 
283
 
void vxxxxx(double p[4], double vmass, int nhel, int nsv, complex<double> vc[6])
284
 
{
285
 
  double hel, hel0, pt, pt2, pp, pzpt, emp, sqh; 
286
 
  int nsvahl; 
287
 
  sqh = sqrt(0.5); 
288
 
  hel = double(nhel); 
289
 
  nsvahl = nsv * abs(hel); 
290
 
  pt2 = (p[1] * p[1]) + (p[2] * p[2]); 
291
 
  pp = min(p[0], sqrt(pt2 + (p[3] * p[3]))); 
292
 
  pt = min(pp, sqrt(pt2)); 
293
 
  vc[0] = complex<double> (p[0] * nsv, p[3] * nsv); 
294
 
  vc[1] = complex<double> (p[1] * nsv, p[2] * nsv); 
295
 
  if (vmass != 0.0)
296
 
  {
297
 
    hel0 = 1.0 - abs(hel); 
298
 
    if(pp == 0.0)
299
 
    {
300
 
      vc[2] = complex<double> (0.0, 0.0); 
301
 
      vc[3] = complex<double> (-hel * sqh, 0.0); 
302
 
      vc[4] = complex<double> (0.0, nsvahl * sqh); 
303
 
      vc[5] = complex<double> (hel0, 0.0); 
304
 
    }
305
 
    else
306
 
    {
307
 
      emp = p[0]/(vmass * pp); 
308
 
      vc[2] = complex<double> (hel0 * pp/vmass, 0.0); 
309
 
      vc[5] = complex<double> (hel0 * p[3] * emp + hel * pt/pp * sqh, 0.0); 
310
 
      if (pt != 0.0)
311
 
      {
312
 
        pzpt = p[3]/(pp * pt) * sqh * hel; 
313
 
        vc[3] = complex<double> (hel0 * p[1] * emp - p[1] * pzpt, -nsvahl *
314
 
            p[2]/pt * sqh);
315
 
        vc[4] = complex<double> (hel0 * p[2] * emp - p[2] * pzpt, nsvahl *
316
 
            p[1]/pt * sqh);
317
 
      }
318
 
      else
319
 
      {
320
 
        vc[3] = complex<double> (-hel * sqh, 0.0); 
321
 
        vc[4] = complex<double> (0.0, nsvahl * Sgn(sqh, p[3])); 
322
 
      }
323
 
    }
324
 
  }
325
 
  else
326
 
  {
327
 
    pp = p[0]; 
328
 
    pt = sqrt((p[1] * p[1]) + (p[2] * p[2])); 
329
 
    vc[2] = complex<double> (0.0, 0.0); 
330
 
    vc[5] = complex<double> (hel * pt/pp * sqh, 0.0); 
331
 
    if (pt != 0.0)
332
 
    {
333
 
      pzpt = p[3]/(pp * pt) * sqh * hel; 
334
 
      vc[3] = complex<double> (-p[1] * pzpt, -nsv * p[2]/pt * sqh); 
335
 
      vc[4] = complex<double> (-p[2] * pzpt, nsv * p[1]/pt * sqh); 
336
 
    }
337
 
    else
338
 
    {
339
 
      vc[3] = complex<double> (-hel * sqh, 0.0); 
340
 
      vc[4] = complex<double> (0.0, nsv * Sgn(sqh, p[3])); 
341
 
    }
342
 
  }
343
 
  return; 
344
 
}
345
 
 
346
 
void oxxxxx(double p[4], double fmass, int nhel, int nsf, complex<double> fo[6])
347
 
{
348
 
  complex<double> chi[2]; 
349
 
  double sf[2], sfomeg[2], omega[2], pp, pp3, sqp0p3, sqm[2]; 
350
 
  int nh, ip, im; 
351
 
  fo[0] = complex<double> (p[0] * nsf, p[3] * nsf); 
352
 
  fo[1] = complex<double> (p[1] * nsf, p[2] * nsf); 
353
 
  nh = nhel * nsf; 
354
 
  if (fmass != 0.000)
355
 
  {
356
 
    pp = min(p[0], sqrt((p[1] * p[1]) + (p[2] * p[2]) + (p[3] * p[3]))); 
357
 
    if (pp == 0.000)
358
 
    {
359
 
      sqm[0] = sqrt(abs(fmass)); 
360
 
      sqm[1] = Sgn(sqm[0], fmass); 
361
 
      ip = -((1 - nh)/2) * nhel; 
362
 
      im = (1 + nh)/2 * nhel; 
363
 
      fo[2] = im * sqm[abs(ip)]; 
364
 
      fo[3] = ip * nsf * sqm[abs(ip)]; 
365
 
      fo[4] = im * nsf * sqm[abs(im)]; 
366
 
      fo[5] = ip * sqm[abs(im)]; 
367
 
    }
368
 
    else
369
 
    {
370
 
      pp = min(p[0], sqrt((p[1] * p[1]) + (p[2] * p[2]) + (p[3] * p[3]))); 
371
 
      sf[0] = double(1 + nsf + (1 - nsf) * nh) * 0.5; 
372
 
      sf[1] = double(1 + nsf - (1 - nsf) * nh) * 0.5; 
373
 
      omega[0] = sqrt(p[0] + pp); 
374
 
      omega[1] = fmass/omega[0]; 
375
 
      ip = (1 + nh)/2; 
376
 
      im = (1 - nh)/2; 
377
 
      sfomeg[0] = sf[0] * omega[ip]; 
378
 
      sfomeg[1] = sf[1] * omega[im]; 
379
 
      pp3 = max(pp + p[3], 0.00); 
380
 
      chi[0] = complex<double> (sqrt(pp3 * 0.5/pp), 0.00); 
381
 
      if (pp3 == 0.00)
382
 
      {
383
 
        chi[1] = complex<double> (-nh, 0.00); 
384
 
      }
385
 
      else
386
 
      {
387
 
        chi[1] = complex<double> (nh * p[1], -p[2])/sqrt(2.0 * pp * pp3); 
388
 
      }
389
 
      fo[2] = sfomeg[1] * chi[im]; 
390
 
      fo[3] = sfomeg[1] * chi[ip]; 
391
 
      fo[4] = sfomeg[0] * chi[im]; 
392
 
      fo[5] = sfomeg[0] * chi[ip]; 
393
 
    }
394
 
  }
395
 
  else
396
 
  {
397
 
    if((p[1] == 0.00) and (p[2] == 0.00) and (p[3] < 0.00))
398
 
    {
399
 
      sqp0p3 = 0.00; 
400
 
    }
401
 
    else
402
 
    {
403
 
      sqp0p3 = sqrt(max(p[0] + p[3], 0.00)) * nsf; 
404
 
    }
405
 
    chi[0] = complex<double> (sqp0p3, 0.00); 
406
 
    if(sqp0p3 == 0.000)
407
 
    {
408
 
      chi[1] = complex<double> (-nhel, 0.00) * sqrt(2.0 * p[0]); 
409
 
    }
410
 
    else
411
 
    {
412
 
      chi[1] = complex<double> (nh * p[1], -p[2])/sqp0p3; 
413
 
    }
414
 
    if(nh == 1)
415
 
    {
416
 
      fo[2] = chi[0]; 
417
 
      fo[3] = chi[1]; 
418
 
      fo[4] = complex<double> (0.00, 0.00); 
419
 
      fo[5] = complex<double> (0.00, 0.00); 
420
 
    }
421
 
    else
422
 
    {
423
 
      fo[2] = complex<double> (0.00, 0.00); 
424
 
      fo[3] = complex<double> (0.00, 0.00); 
425
 
      fo[4] = chi[1]; 
426
 
      fo[5] = chi[0]; 
427
 
    }
428
 
  }
429
 
  return; 
430
 
}
431
 
 
432
 
void sxxxxx(double p[4], int nss, complex<double> sc[3])
433
 
{
434
 
  sc[2] = complex<double> (1.00, 0.00); 
435
 
  sc[0] = complex<double> (p[0] * nss, p[3] * nss); 
436
 
  sc[1] = complex<double> (p[1] * nss, p[2] * nss); 
437
 
  return; 
438
 
}
439
 
 
440
 
void FFV1_0(complex<double> F1[], complex<double> F2[], complex<double> V3[],
441
 
    complex<double> COUP, complex<double> & vertex)
442
 
{
443
 
  static complex<double> cI = complex<double> (0., 1.); 
444
 
  complex<double> TMP0; 
445
 
  TMP0 = (F1[2] * (F2[4] * (V3[2] + V3[5]) + F2[5] * (V3[3] + cI * (V3[4]))) +
446
 
      (F1[3] * (F2[4] * (V3[3] - cI * (V3[4])) + F2[5] * (V3[2] - V3[5])) +
447
 
      (F1[4] * (F2[2] * (V3[2] - V3[5]) - F2[3] * (V3[3] + cI * (V3[4]))) +
448
 
      F1[5] * (F2[2] * (+cI * (V3[4]) - V3[3]) + F2[3] * (V3[2] + V3[5])))));
449
 
  vertex = COUP * - cI * TMP0; 
450
 
}
451
 
 
452
 
 
453
 
void FFV1P0_3(complex<double> F1[], complex<double> F2[], complex<double> COUP,
454
 
    double M3, double W3, complex<double> V3[])
455
 
{
456
 
  static complex<double> cI = complex<double> (0., 1.); 
457
 
  double P3[4]; 
458
 
  complex<double> denom; 
459
 
  V3[0] = +F1[0] + F2[0]; 
460
 
  V3[1] = +F1[1] + F2[1]; 
461
 
  P3[0] = -V3[0].real(); 
462
 
  P3[1] = -V3[1].real(); 
463
 
  P3[2] = -V3[1].imag(); 
464
 
  P3[3] = -V3[0].imag(); 
465
 
  denom = COUP/(P3[0] * P3[0] - P3[1] * P3[1] - P3[2] * P3[2] - P3[3] * P3[3] -
466
 
      M3 * (M3 - cI * W3));
467
 
  V3[2] = denom * - cI * (F1[2] * F2[4] + F1[3] * F2[5] + F1[4] * F2[2] + F1[5]
468
 
      * F2[3]);
469
 
  V3[3] = denom * - cI * (F1[4] * F2[3] + F1[5] * F2[2] - F1[2] * F2[5] - F1[3]
470
 
      * F2[4]);
471
 
  V3[4] = denom * - cI * (-cI * (F1[2] * F2[5] + F1[5] * F2[2]) + cI * (F1[3] *
472
 
      F2[4] + F1[4] * F2[3]));
473
 
  V3[5] = denom * - cI * (F1[3] * F2[5] + F1[4] * F2[2] - F1[2] * F2[4] - F1[5]
474
 
      * F2[3]);
475
 
}
476
 
 
477
 
 
478
 
}  // end namespace $(namespace)s_sm
479