Hammer  1.0.0
Helicity Amplitude Module for Matrix Element Reweighting
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AmplBDstarDGamLepNu.cc
Go to the documentation of this file.
1 ///
2 /// @file AmplBDstarDGamLepNu.cc
3 /// @brief \f$ B \rightarrow D^* \tau\nu, D^* \rightarrow D \gamma \f$ amplitude
4 ///
5 
6 //**** This file is a part of the HAMMER library
7 //**** Copyright (C) 2016 - 2020 The HAMMER Collaboration
8 //**** HAMMER is licensed under version 3 of the GPL; see COPYING for details
9 //**** Please note the MCnet academic guidelines; see GUIDELINES for details
10 
11 // -*- C++ -*-
13 #include "Hammer/IndexLabels.hh"
14 #include "Hammer/Math/Constants.hh"
15 #include "Hammer/Particle.hh"
16 #include "Hammer/Tools/Pdg.hh"
18 #include <cmath>
19 
20 using namespace std;
21 using namespace complex_literals;
22 
23 namespace Hammer {
24 
25  namespace MD = MultiDimensional;
26 
27  AmplBDstarDGamLepNu::AmplBDstarDGamLepNu() {
28  // Create tensor rank and dimensions
29  vector<IndexType> dims{{11, 8, 2, 2, 2, 2}};
30  string name{"AmplBDstarDGamLepNu"};
31  addProcessSignature(PID::BPLUS, {-PID::DSTAR, PID::NU_TAU, PID::ANTITAU}, {-PID::D0, PID::GAMMA});
33 
34  addProcessSignature(PID::BZERO, {PID::DSTARMINUS, PID::NU_TAU, PID::ANTITAU}, {PID::DMINUS, PID::GAMMA});
36 
37  addProcessSignature(PID::BPLUS, {-PID::DSTAR, PID::NU_MU, PID::ANTIMUON}, {-PID::D0, PID::GAMMA});
39 
40  addProcessSignature(PID::BZERO, {PID::DSTARMINUS, PID::NU_MU, PID::ANTIMUON}, {PID::DMINUS, PID::GAMMA});
42 
43  addProcessSignature(PID::BPLUS, {-PID::DSTAR, PID::NU_E, PID::POSITRON}, {-PID::D0, PID::GAMMA});
45 
46  addProcessSignature(PID::BZERO, {PID::DSTARMINUS, PID::NU_E, PID::POSITRON}, {PID::DMINUS, PID::GAMMA});
48 
49  //bs -> cs
50  addProcessSignature(PID::BS, {PID::DSSTARMINUS, PID::NU_TAU, PID::ANTITAU}, {PID::DSMINUS, PID::GAMMA});
52 
53  addProcessSignature(PID::BS, {PID::DSSTARMINUS, PID::NU_MU, PID::ANTIMUON}, {PID::DSMINUS, PID::GAMMA});
55 
56  addProcessSignature(PID::BS, {PID::DSSTARMINUS, PID::NU_E, PID::POSITRON}, {PID::DSMINUS, PID::GAMMA});
58 
59  setSignatureIndex();
60  }
61 
62  void AmplBDstarDGamLepNu::eval(const Particle& parent, const ParticleList& daughters,
63  const ParticleList&) {
64  // Momenta
65  const FourMomentum& pBmes = parent.momentum();
66  const FourMomentum& pDstarmes = daughters[0].momentum();
67  const FourMomentum& kNuTau = daughters[1].momentum();
68  const FourMomentum& pTau = daughters[2].momentum();
69  const FourMomentum& pDmes = daughters[3].momentum();
70  const FourMomentum& kPhoton = daughters[4].momentum();
71 
72  // kinematic objects
73  const double Mb = pBmes.mass();
74  const double Mb2 = Mb*Mb;
75  const double Mds = pDstarmes.mass();
76  const double Mds2 = Mds*Mds;
77  const double Mt = pTau.mass();
78  const double Md = pDmes.mass();
79  const double Md2 = Md*Md;
80  const double Sqq = Mb2 + Mds2 - 2. * (pBmes * pDstarmes);
81  const double sqSqq = sqrt(Sqq);
82  const double Ew = (Mb2 - Mds2 + Sqq) / (2 * Mb);
83  // const double Eds = (Mb2 + Mds2 - Sqq) / (2 * Mb);
84  const double Pw = sqrt(Ew*Ew - Sqq);
85  const double Pw2 = Pw*Pw;
86  const double BNuTau = (pBmes * kNuTau);
87  const double NuTauQ = (pBmes * kNuTau) - (pDstarmes * kNuTau);
88  const double BQ = Mb2 - (pBmes * pDstarmes);
89  // const double DstarQ = pDstarmes * pBmes - Mds2;
90  const double PhotonD = kPhoton * pDmes;
91  const double PhotonQ = (kPhoton * pBmes) - (kPhoton * pDstarmes);
92  const double PhotonNuTau = kPhoton * kNuTau;
93  const double TauNuTau = (pTau * kNuTau);
94  const double epsPhotonBDNuTau = epsilon(kPhoton, pBmes, pDmes, kNuTau);
95 
96  // Helicity Angles
97  const double CosTe = (Ew * Mb * PhotonD - Sqq * PhotonD - Mds2 * PhotonQ) / (Mb * Pw * PhotonD);
98  const double SinTe = sqrt(1. - CosTe*CosTe);
99  // const double CosTeHalf = pow((1. + CosTe) / 2., 0.5);
100  // const double SinTeHalf = pow((1. - CosTe) / 2., 0.5);
101  const double CosTeHalfSq = (1. + CosTe) / 2.;
102  const double SinTeHalfSq = (1. - CosTe) / 2.;
103  const double CscTe = 1. / SinTe;
104 
105  const double CosTt = -((Ew * (Sqq * BNuTau - NuTauQ * BQ)) / (sqrt(Ew*Ew - Sqq) * NuTauQ * BQ));
106  const double SinTt = sqrt(1. - CosTt*CosTt);
107  const double CscTt = 1. / SinTt;
108 
109  // const double CosTtHalf = pow((1. + CosTt) / 2., 0.5);
110  // const double SinTtHalf = pow((1. - CosTt) / 2., 0.5);
111  const double CosTtHalfSq = (1. + CosTt) / 2.;
112  const double SinTtHalfSq = (1. - CosTt) / 2.;
113 
114  const double CosPePt =
115  (CscTe * CscTt) / (Mds * sqSqq * NuTauQ * PhotonD) *
116  (Mds2 * (-PhotonQ * NuTauQ + Sqq * PhotonNuTau) +
117  PhotonD * NuTauQ * (-(Mb2 - Mds2) * CosTe * CosTt + BQ * (1. + CosTe * CosTt)) - Sqq * BNuTau * PhotonD);
118  const double SinPePt = (Mds * sqSqq * CscTe * CscTt * epsPhotonBDNuTau) / (Mb * Pw * PhotonD * TauNuTau);
119  const complex<double> ExpIPePt = CosPePt + 1i * SinPePt;
120 
121  // Collective Functions
122  const complex<double> Apl = SinTeHalfSq * CosTtHalfSq / ExpIPePt + ExpIPePt * CosTeHalfSq * SinTtHalfSq;
123  const complex<double> Aplc = SinTeHalfSq * CosTtHalfSq * ExpIPePt + CosTeHalfSq * SinTtHalfSq / ExpIPePt;
124  const complex<double> Ami = SinTeHalfSq * CosTtHalfSq / ExpIPePt - ExpIPePt * CosTeHalfSq * SinTtHalfSq;
125  const complex<double> Amic = SinTeHalfSq * CosTtHalfSq * ExpIPePt - CosTeHalfSq * SinTtHalfSq / ExpIPePt;
126  const complex<double> Aze = SinTe * SinTt;
127 
128  const complex<double> Bpl = SinTt * (CosTeHalfSq * ExpIPePt + SinTeHalfSq / ExpIPePt);
129  const complex<double> Bplc = SinTt * (CosTeHalfSq / ExpIPePt + SinTeHalfSq * ExpIPePt);
130  const complex<double> Bmi = SinTt * (CosTeHalfSq * ExpIPePt - SinTeHalfSq / ExpIPePt);
131  const complex<double> Bmic = SinTt * (CosTeHalfSq / ExpIPePt - SinTeHalfSq * ExpIPePt);
132  const complex<double> Bze = SinTe * CosTt;
133  const complex<double> Bzeb = SinTe;
134 
135  // Parity Conjugate Collective Functions
136  const complex<double> APpl = CosTeHalfSq * CosTtHalfSq / ExpIPePt + ExpIPePt * SinTeHalfSq * SinTtHalfSq;
137  const complex<double> APplc = CosTeHalfSq * CosTtHalfSq * ExpIPePt + SinTeHalfSq * SinTtHalfSq / ExpIPePt;
138  const complex<double> APmi = CosTeHalfSq * CosTtHalfSq / ExpIPePt - ExpIPePt * SinTeHalfSq * SinTtHalfSq;
139  const complex<double> APmic = CosTeHalfSq * CosTtHalfSq * ExpIPePt - SinTeHalfSq * SinTtHalfSq / ExpIPePt;
140  const complex<double> APze = -Aze;
141 
142  const complex<double> BPpl = SinTt * (SinTeHalfSq * ExpIPePt + CosTeHalfSq / ExpIPePt);
143  const complex<double> BPplc = SinTt * (SinTeHalfSq / ExpIPePt + CosTeHalfSq * ExpIPePt);
144  const complex<double> BPmi = SinTt * (SinTeHalfSq * ExpIPePt - CosTeHalfSq / ExpIPePt);
145  const complex<double> BPmic = SinTt * (SinTeHalfSq / ExpIPePt - CosTeHalfSq * ExpIPePt);
146  const complex<double> BPze = -Bze;
147  const complex<double> BPzeb = -Bzeb;
148 
149  const double TwoGfSqMSq = 2 * GFermi * (Mds2 - Md2) * sqrt(Sqq - Mt*Mt);
150  const double eMuOnSqrt2MGam = sqrt(48.*pi*Mds2/pow(Mds2 - Md2, 3.));
151 
152  // initialize tensor elements to zero
153  Tensor& t = getTensor();
154 
155  t.clearData();
156 
157  // set non-zero tensor elements
158  t.element({6, 1, 0, 1, 1, 0}) = 1i * (Aplc/2. + (Aze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
159  t.element({6, 2, 0, 1, 1, 0}) = 1i * Amic * Mb * Pw;
160  t.element({6, 4, 0, 1, 1, 0}) = (-0.5i * Aze * Mb2 * Pw2)/(Mds * sqSqq);
161  t.element({8, 1, 0, 1, 1, 0}) = -1i * (Aplc/2. + (Aze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
162  t.element({8, 2, 0, 1, 1, 0}) = 1i * Amic * Mb * Pw;
163  t.element({8, 4, 0, 1, 1, 0}) = (0.5i * Aze * Mb2 * Pw2)/(Mds * sqSqq);
164  t.element({10, 5, 0, 1, 1, 0}) = (2i * Aze * Mb2 * Mt * Pw2)/(Mds * sqSqq);
165  t.element({10, 6, 0, 1, 1, 0}) = -1i * Mt * (2. * Aplc + (Aze * (-Mb2 + Mds2 + Sqq))/(2. * Mds * sqSqq));
166  t.element({10, 7, 0, 1, 1, 0}) = 1i * Mt * ((-2. * Aplc * (Mb2 - Mds2))/Sqq + (4. * Amic * Mb * Pw)/Sqq + (Aze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds * sqSqq));
167  t.element({2, 0, 0, 1, 1, 1}) = (0.25i * Bzeb * Mb * Pw)/Mds;
168  t.element({4, 0, 0, 1, 1, 1}) = (-0.25i * Bzeb * Mb * Pw)/Mds;
169  t.element({6, 1, 0, 1, 1, 1}) = 1i * Mt * ((Bzeb * Mb * Pw)/(4. * Mds * Sqq) + Bmic/(4. * sqSqq) + (Bze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
170  t.element({6, 2, 0, 1, 1, 1}) = (-0.5i * Bplc * Mb * Mt * Pw)/sqSqq;
171  t.element({6, 3, 0, 1, 1, 1}) = (0.25i * Bzeb * Mb * Mt * Pw)/Mds;
172  t.element({6, 4, 0, 1, 1, 1}) = -1i * Mb * Mt * Pw * ((Bzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (Bze * Mb * Pw)/(2. * Mds * Sqq));
173  t.element({8, 1, 0, 1, 1, 1}) = -1i * Mt * ((Bzeb * Mb * Pw)/(4. * Mds * Sqq) + Bmic/(4. * sqSqq) + (Bze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
174  t.element({8, 2, 0, 1, 1, 1}) = (-0.5i * Bplc * Mb * Mt * Pw)/sqSqq;
175  t.element({8, 3, 0, 1, 1, 1}) = (-0.25i * Bzeb * Mb * Mt * Pw)/Mds;
176  t.element({8, 4, 0, 1, 1, 1}) = 1i * Mb * Mt * Pw * ((Bzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (Bze * Mb * Pw)/(2. * Mds * Sqq));
177  t.element({10, 5, 0, 1, 1, 1}) = (2i * Bze * Mb2 * Pw2)/Mds;
178  t.element({10, 6, 0, 1, 1, 1}) = -1i * (Bmic * sqSqq + (Bze * (-Mb2 + Mds2 + Sqq))/(2. * Mds));
179  t.element({10, 7, 0, 1, 1, 1}) = 1i * ((Bze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds) + (Bmic * (-Mb2 + Mds2))/sqSqq - (2. * Bplc * Mb * Pw)/sqSqq);
180  t.element({0, 1, 1, 0, 0, 0}) = -1i * Mt * ((Bzeb * Mb * Pw)/(4. * Mds * Sqq) + Bmi/(4. * sqSqq) + (Bze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
181  t.element({0, 2, 1, 0, 0, 0}) = (0.5i * Bpl * Mb * Mt * Pw)/sqSqq;
182  t.element({0, 3, 1, 0, 0, 0}) = (-0.25i * Bzeb * Mb * Mt * Pw)/Mds;
183  t.element({0, 4, 1, 0, 0, 0}) = 1i * Mb * Mt * Pw * ((Bzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (Bze * Mb * Pw)/(2. * Mds * Sqq));
184  t.element({1, 0, 1, 0, 0, 0}) = (0.25i * Bzeb * Mb * Pw)/Mds;
185  t.element({3, 0, 1, 0, 0, 0}) = (-0.25i * Bzeb * Mb * Pw)/Mds;
186  t.element({5, 1, 1, 0, 0, 0}) = 1i * Mt * ((Bzeb * Mb * Pw)/(4. * Mds * Sqq) + Bmi/(4. * sqSqq) + (Bze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
187  t.element({5, 2, 1, 0, 0, 0}) = (0.5i * Bpl * Mb * Mt * Pw)/sqSqq;
188  t.element({5, 3, 1, 0, 0, 0}) = (0.25i * Bzeb * Mb * Mt * Pw)/Mds;
189  t.element({5, 4, 1, 0, 0, 0}) = -1i * Mb * Mt * Pw * ((Bzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (Bze * Mb * Pw)/(2. * Mds * Sqq));
190  t.element({7, 1, 1, 0, 0, 0}) = -1i * Mt * ((Bzeb * Mb * Pw)/(4. * Mds * Sqq) + Bmi/(4. * sqSqq) + (Bze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
191  t.element({7, 2, 1, 0, 0, 0}) = (0.5i * Bpl * Mb * Mt * Pw)/sqSqq;
192  t.element({7, 3, 1, 0, 0, 0}) = (-0.25i * Bzeb * Mb * Mt * Pw)/Mds;
193  t.element({7, 4, 1, 0, 0, 0}) = 1i * Mb * Mt * Pw * ((Bzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (Bze * Mb * Pw)/(2. * Mds * Sqq));
194  t.element({9, 5, 1, 0, 0, 0}) = (-2i * Bze * Mb2 * Pw2)/Mds;
195  t.element({9, 6, 1, 0, 0, 0}) = 1i * (Bmi * sqSqq + (Bze * (-Mb2 + Mds2 + Sqq))/(2. * Mds));
196  t.element({9, 7, 1, 0, 0, 0}) = 1i * (-(Bze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds) + (Bmi * (Mb2 - Mds2))/sqSqq + (2. * Bpl * Mb * Pw)/sqSqq);
197  t.element({0, 1, 1, 0, 0, 1}) = 1i * (Apl/2. + (Aze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
198  t.element({0, 2, 1, 0, 0, 1}) = 1i * Ami * Mb * Pw;
199  t.element({0, 4, 1, 0, 0, 1}) = (-0.5i * Aze * Mb2 * Pw2)/(Mds * sqSqq);
200  t.element({5, 1, 1, 0, 0, 1}) = -1i * (Apl/2. + (Aze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
201  t.element({5, 2, 1, 0, 0, 1}) = 1i * Ami * Mb * Pw;
202  t.element({5, 4, 1, 0, 0, 1}) = (0.5i * Aze * Mb2 * Pw2)/(Mds * sqSqq);
203  t.element({7, 1, 1, 0, 0, 1}) = 1i * (Apl/2. + (Aze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
204  t.element({7, 2, 1, 0, 0, 1}) = 1i * Ami * Mb * Pw;
205  t.element({7, 4, 1, 0, 0, 1}) = (-0.5i * Aze * Mb2 * Pw2)/(Mds * sqSqq);
206  t.element({9, 5, 1, 0, 0, 1}) = (2i * Aze * Mb2 * Mt * Pw2)/(Mds * sqSqq);
207  t.element({9, 6, 1, 0, 0, 1}) = -1i * Mt * (2. * Apl + (Aze * (-Mb2 + Mds2 + Sqq))/(2. * Mds * sqSqq));
208  t.element({9, 7, 1, 0, 0, 1}) = 1i * Mt * ((-2. * Apl * (Mb2 - Mds2))/Sqq + (4. * Ami * Mb * Pw)/Sqq + (Aze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds * sqSqq));
209  t.element({6, 1, 1, 1, 1, 0}) = 1i * (APplc/2. + (APze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
210  t.element({6, 2, 1, 1, 1, 0}) = 1i * APmic * Mb * Pw;
211  t.element({6, 4, 1, 1, 1, 0}) = (-0.5i * APze * Mb2 * Pw2)/(Mds * sqSqq);
212  t.element({8, 1, 1, 1, 1, 0}) = -1i * (APplc/2. + (APze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
213  t.element({8, 2, 1, 1, 1, 0}) = 1i * APmic * Mb * Pw;
214  t.element({8, 4, 1, 1, 1, 0}) = (0.5i * APze * Mb2 * Pw2)/(Mds * sqSqq);
215  t.element({10, 5, 1, 1, 1, 0}) = (2i * APze * Mb2 * Mt * Pw2)/(Mds * sqSqq);
216  t.element({10, 6, 1, 1, 1, 0}) = -1i * Mt * (2. * APplc + (APze * (-Mb2 + Mds2 + Sqq))/(2. * Mds * sqSqq));
217  t.element({10, 7, 1, 1, 1, 0}) = 1i * Mt * ((-2. * APplc * (Mb2 - Mds2))/Sqq + (4. * APmic * Mb * Pw)/Sqq + (APze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds * sqSqq));
218  t.element({2, 0, 1, 1, 1, 1}) = (0.25i * BPzeb * Mb * Pw)/Mds;
219  t.element({4, 0, 1, 1, 1, 1}) = (-0.25i * BPzeb * Mb * Pw)/Mds;
220  t.element({6, 1, 1, 1, 1, 1}) = 1i * Mt * ((BPzeb * Mb * Pw)/(4. * Mds * Sqq) + BPmic/(4. * sqSqq) + (BPze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
221  t.element({6, 2, 1, 1, 1, 1}) = (-0.5i * BPplc * Mb * Mt * Pw)/sqSqq;
222  t.element({6, 3, 1, 1, 1, 1}) = (0.25i * BPzeb * Mb * Mt * Pw)/Mds;
223  t.element({6, 4, 1, 1, 1, 1}) = -1i * Mb * Mt * Pw * ((BPzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (BPze * Mb * Pw)/(2. * Mds * Sqq));
224  t.element({8, 1, 1, 1, 1, 1}) = -1i * Mt * ((BPzeb * Mb * Pw)/(4. * Mds * Sqq) + BPmic/(4. * sqSqq) + (BPze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
225  t.element({8, 2, 1, 1, 1, 1}) = (-0.5i * BPplc * Mb * Mt * Pw)/sqSqq;
226  t.element({8, 3, 1, 1, 1, 1}) = (-0.25i * BPzeb * Mb * Mt * Pw)/Mds;
227  t.element({8, 4, 1, 1, 1, 1}) = 1i * Mb * Mt * Pw * ((BPzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (BPze * Mb * Pw)/(2. * Mds * Sqq));
228  t.element({10, 5, 1, 1, 1, 1}) = (2i * BPze * Mb2 * Pw2)/Mds;
229  t.element({10, 6, 1, 1, 1, 1}) = -1i * (BPmic * sqSqq + (BPze * (-Mb2 + Mds2 + Sqq))/(2. * Mds));
230  t.element({10, 7, 1, 1, 1, 1}) = 1i * ((BPze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds) + (BPmic * (-Mb2 + Mds2))/sqSqq - (2. * BPplc * Mb * Pw)/sqSqq);
231  t.element({0, 1, 0, 0, 0, 0}) = -1i * Mt * ((BPzeb * Mb * Pw)/(4. * Mds * Sqq) + BPmi/(4. * sqSqq) + (BPze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
232  t.element({0, 2, 0, 0, 0, 0}) = (0.5i * BPpl * Mb * Mt * Pw)/sqSqq;
233  t.element({0, 3, 0, 0, 0, 0}) = (-0.25i * BPzeb * Mb * Mt * Pw)/Mds;
234  t.element({0, 4, 0, 0, 0, 0}) = 1i * Mb * Mt * Pw * ((BPzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (BPze * Mb * Pw)/(2. * Mds * Sqq));
235  t.element({1, 0, 0, 0, 0, 0}) = (0.25i * BPzeb * Mb * Pw)/Mds;
236  t.element({3, 0, 0, 0, 0, 0}) = (-0.25i * BPzeb * Mb * Pw)/Mds;
237  t.element({5, 1, 0, 0, 0, 0}) = 1i * Mt * ((BPzeb * Mb * Pw)/(4. * Mds * Sqq) + BPmi/(4. * sqSqq) + (BPze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
238  t.element({5, 2, 0, 0, 0, 0}) = (0.5i * BPpl * Mb * Mt * Pw)/sqSqq;
239  t.element({5, 3, 0, 0, 0, 0}) = (0.25i * BPzeb * Mb * Mt * Pw)/Mds;
240  t.element({5, 4, 0, 0, 0, 0}) = -1i * Mb * Mt * Pw * ((BPzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (BPze * Mb * Pw)/(2. * Mds * Sqq));
241  t.element({7, 1, 0, 0, 0, 0}) = -1i * Mt * ((BPzeb * Mb * Pw)/(4. * Mds * Sqq) + BPmi/(4. * sqSqq) + (BPze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * Sqq));
242  t.element({7, 2, 0, 0, 0, 0}) = (0.5i * BPpl * Mb * Mt * Pw)/sqSqq;
243  t.element({7, 3, 0, 0, 0, 0}) = (-0.25i * BPzeb * Mb * Mt * Pw)/Mds;
244  t.element({7, 4, 0, 0, 0, 0}) = 1i * Mb * Mt * Pw * ((BPzeb * (-Mb2 + Mds2))/(4. * Mds * Sqq) + (BPze * Mb * Pw)/(2. * Mds * Sqq));
245  t.element({9, 5, 0, 0, 0, 0}) = (-2i * BPze * Mb2 * Pw2)/Mds;
246  t.element({9, 6, 0, 0, 0, 0}) = 1i * (BPmi * sqSqq + (BPze * (-Mb2 + Mds2 + Sqq))/(2. * Mds));
247  t.element({9, 7, 0, 0, 0, 0}) = 1i * (-(BPze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds) + (BPmi * (Mb2 - Mds2))/sqSqq + (2. * BPpl * Mb * Pw)/sqSqq);
248  t.element({0, 1, 0, 0, 0, 1}) = 1i * (APpl/2. + (APze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
249  t.element({0, 2, 0, 0, 0, 1}) = 1i * APmi * Mb * Pw;
250  t.element({0, 4, 0, 0, 0, 1}) = (-0.5i * APze * Mb2 * Pw2)/(Mds * sqSqq);
251  t.element({5, 1, 0, 0, 0, 1}) = -1i * (APpl/2. + (APze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
252  t.element({5, 2, 0, 0, 0, 1}) = 1i * APmi * Mb * Pw;
253  t.element({5, 4, 0, 0, 0, 1}) = (0.5i * APze * Mb2 * Pw2)/(Mds * sqSqq);
254  t.element({7, 1, 0, 0, 0, 1}) = 1i * (APpl/2. + (APze * (-Mb2 + Mds2 + Sqq))/(8. * Mds * sqSqq));
255  t.element({7, 2, 0, 0, 0, 1}) = 1i * APmi * Mb * Pw;
256  t.element({7, 4, 0, 0, 0, 1}) = (-0.5i * APze * Mb2 * Pw2)/(Mds * sqSqq);
257  t.element({9, 5, 0, 0, 0, 1}) = (2i * APze * Mb2 * Mt * Pw2)/(Mds * sqSqq);
258  t.element({9, 6, 0, 0, 0, 1}) = -1i * Mt * (2. * APpl + (APze * (-Mb2 + Mds2 + Sqq))/(2. * Mds * sqSqq));
259  t.element({9, 7, 0, 0, 0, 1}) = 1i * Mt * ((-2. * APpl * (Mb2 - Mds2))/Sqq + (4. * APmi * Mb * Pw)/Sqq + (APze * (Mb2 + 3. * Mds2 - Sqq))/(2. * Mds * sqSqq));
260 
261  t *= TwoGfSqMSq*eMuOnSqrt2MGam;
262  }
263 
264  void AmplBDstarDGamLepNu::addRefs() const {
265  if(!getSettingsHandler()->checkReference("Ligeti:2016npd")){
266  string ref =
267  "@article{Ligeti:2016npd,\n"
268  " author = \"Ligeti, Zoltan and Papucci, Michele and Robinson, Dean J.\",\n"
269  " title = \"{New Physics in the Visible Final States of $B\\to D^{(*)}\\tau\\nu$}\",\n"
270  " journal = \"JHEP\",\n"
271  " volume = \"01\",\n"
272  " year = \"2017\",\n"
273  " pages = \"083\",\n"
274  " doi = \"10.1007/JHEP01(2017)083\",\n"
275  " eprint = \"1610.02045\",\n"
276  " archivePrefix = \"arXiv\",\n"
277  " primaryClass = \"hep-ph\",\n"
278  " SLACcitation = \"%%CITATION = ARXIV:1610.02045;%%\"\n"
279  "}\n";
280  getSettingsHandler()->addReference("Ligeti:2016npd", ref);
281  }
282  }
283 
284 } // namespace Hammer
TensorData makeEmptySparse(const IndexList &dimensions, const LabelsList &labels)
std::complex< double > & element(const IndexList &indices={})
access an element given its indices
Definition: Tensor.cc:67
static constexpr double GFermi
Definition: Constants.hh:29
Tensor indices label definitions.
double mass() const
returns the invariant mass if the invariant mass squared is negative returns
std::vector< Particle > ParticleList
Definition: Particle.fhh:20
Sparse tensor data container.
double epsilon(const FourMomentum &a, const FourMomentum &b, const FourMomentum &c, const FourMomentum &d)
contracts four 4-momenta with an 4D epsilon tensor.
Particle class.
Definition: Particle.hh:30
Multidimensional tensor class with complex numbers as elements.
Definition: Tensor.hh:33
void clearData()
sets all the elements to 0
Definition: Tensor.cc:229
const FourMomentum & momentum() const
Definition: Particle.cc:56
Various numerical constants.
Hammer particle data class.
Hammer particle class.
4-momentum class
Definition: FourMomentum.hh:30
static constexpr double pi
Definition: Constants.hh:21