24 namespace MD = MultiDimensional;
26 RateBD0starLepNu::RateBD0starLepNu() {
28 vector<IndexType> dims{{11, 4, 11, 4, _nPoints}};
29 string name {
"RateBD0starLepNuQ2"};
30 auto& pdg = PID::instance();
31 addProcessSignature(PID::BPLUS,{-PID::DSSD0STAR,PID::NU_TAU,PID::ANTITAU});
32 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::ANTITAU), pdg.getMass(PID::BPLUS)-pdg.getMass(PID::DSSD0STAR))});
35 addProcessSignature(PID::BZERO,{PID::DSSD0STARMINUS,PID::NU_TAU,PID::ANTITAU});
36 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::ANTITAU), pdg.getMass(PID::BZERO)-pdg.getMass(PID::DSSD0STARMINUS))});
39 addProcessSignature(PID::BPLUS,{-PID::DSSD0STAR,PID::NU_MU,PID::ANTIMUON});
40 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::ANTIMUON), pdg.getMass(PID::BPLUS)-pdg.getMass(PID::DSSD0STAR))});
43 addProcessSignature(PID::BZERO,{PID::DSSD0STARMINUS,PID::NU_MU,PID::ANTIMUON});
44 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::ANTIMUON), pdg.getMass(PID::BZERO)-pdg.getMass(PID::DSSD0STARMINUS))});
47 addProcessSignature(PID::BPLUS,{-PID::DSSD0STAR,PID::NU_E,PID::POSITRON});
48 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::POSITRON), pdg.getMass(PID::BPLUS)-pdg.getMass(PID::DSSD0STAR))});
51 addProcessSignature(PID::BZERO,{PID::DSSD0STARMINUS,PID::NU_E,PID::POSITRON});
52 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::POSITRON), pdg.getMass(PID::BZERO)-pdg.getMass(PID::DSSD0STARMINUS))});
56 addProcessSignature(PID::BS,{PID::DSSDS0STARMINUS,PID::NU_TAU,PID::ANTITAU});
57 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::ANTITAU), pdg.getMass(PID::BS)-pdg.getMass(PID::DSSDS0STARMINUS))});
60 addProcessSignature(PID::BS,{PID::DSSDS0STARMINUS,PID::NU_MU,PID::ANTIMUON});
61 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::ANTIMUON), pdg.getMass(PID::BS)-pdg.getMass(PID::DSSDS0STARMINUS))});
64 addProcessSignature(PID::BS,{PID::DSSDS0STARMINUS,PID::NU_E,PID::POSITRON});
65 addIntegrationBoundaries({
PS::makeQ2Function(pdg.getMass(PID::POSITRON), pdg.getMass(PID::BS)-pdg.getMass(PID::DSSDS0STARMINUS))});
71 Tensor RateBD0starLepNu::evalAtPSPoint(
const vector<double>& point) {
72 auto labs = getTensor().
labels();
74 auto dimensions = getTensor().dims();
75 dimensions.pop_back();
78 const double Mb = masses()[0];
79 const double Mc = masses()[1];
80 const double Mt = masses()[3];
81 const double Mb2 = Mb*Mb;
82 const double Mc2 = Mc*Mc;
83 const double Mt2 = Mt*Mt;
86 const double Sqq = point[0];
88 const double mSqq = Sqq/Mb2;
89 const double w = (Mb2 + Mc2 - Sqq)/(2 * Mb * Mc);
90 const double rC = Mc/Mb;
91 const double rt = Mt/Mb;
93 const double mSqqSq = mSqq*mSqq;
94 const double wSq = w*w;
95 const double rtSq = rt*rt;
96 const double rCSq = rC*rC;
97 const double rCp1Sq = (rC + 1.)*(rC + 1.);
98 const double rCm1Sq = (rC - 1.)*(rC - 1.);
106 double RateNorm = (
GFermi*
GFermi*Mb2*Mc*rCSq*(-Mt2 + Sqq)*(1 + rCSq - rtSq - 2*rC*w)*sqrt(w*w - 1.))/(16.*pow(
pi,3.)*(1 + rCSq - 2*rC*w));
109 result.element({0,1,0,1}) = ((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
110 result.element({0,1,0,2}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
111 result.element({0,1,1,0}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
112 result.element({0,1,3,0}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
113 result.element({0,1,5,1}) = -((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
114 result.element({0,1,5,2}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
115 result.element({0,1,7,1}) = ((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
116 result.element({0,1,7,2}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
117 result.element({0,1,9,3}) = (-2*(1 + rC)*rt*(-1 + wSq))/mSqq;
118 result.element({0,2,0,1}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
119 result.element({0,2,0,2}) = ((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
120 result.element({0,2,1,0}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
121 result.element({0,2,3,0}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
122 result.element({0,2,5,1}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
123 result.element({0,2,5,2}) = -((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
124 result.element({0,2,7,1}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
125 result.element({0,2,7,2}) = ((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
126 result.element({0,2,9,3}) = (-2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
127 result.element({1,0,0,1}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
128 result.element({1,0,0,2}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
129 result.element({1,0,1,0}) = 0.5;
130 result.element({1,0,3,0}) = -0.5;
131 result.element({1,0,5,1}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
132 result.element({1,0,5,2}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
133 result.element({1,0,7,1}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
134 result.element({1,0,7,2}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
135 result.element({2,0,2,0}) = 0.5;
136 result.element({2,0,4,0}) = -0.5;
137 result.element({2,0,6,1}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
138 result.element({2,0,6,2}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
139 result.element({2,0,8,1}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
140 result.element({2,0,8,2}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
141 result.element({3,0,0,1}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
142 result.element({3,0,0,2}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
143 result.element({3,0,1,0}) = -0.5;
144 result.element({3,0,3,0}) = 0.5;
145 result.element({3,0,5,1}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
146 result.element({3,0,5,2}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
147 result.element({3,0,7,1}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
148 result.element({3,0,7,2}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
149 result.element({4,0,2,0}) = -0.5;
150 result.element({4,0,4,0}) = 0.5;
151 result.element({4,0,6,1}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
152 result.element({4,0,6,2}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
153 result.element({4,0,8,1}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
154 result.element({4,0,8,2}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
155 result.element({5,1,0,1}) = -((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
156 result.element({5,1,0,2}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
157 result.element({5,1,1,0}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
158 result.element({5,1,3,0}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
159 result.element({5,1,5,1}) = ((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
160 result.element({5,1,5,2}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
161 result.element({5,1,7,1}) = -((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
162 result.element({5,1,7,2}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
163 result.element({5,1,9,3}) = (2*(1 + rC)*rt*(-1 + wSq))/mSqq;
164 result.element({5,2,0,1}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
165 result.element({5,2,0,2}) = -((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
166 result.element({5,2,1,0}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
167 result.element({5,2,3,0}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
168 result.element({5,2,5,1}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
169 result.element({5,2,5,2}) = ((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
170 result.element({5,2,7,1}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
171 result.element({5,2,7,2}) = -((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
172 result.element({5,2,9,3}) = (2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
173 result.element({6,1,2,0}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
174 result.element({6,1,4,0}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
175 result.element({6,1,6,1}) = ((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
176 result.element({6,1,6,2}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
177 result.element({6,1,8,1}) = -((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
178 result.element({6,1,8,2}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
179 result.element({6,1,10,3}) = (-2*(1 + rC)*rt*(-1 + wSq))/mSqq;
180 result.element({6,2,2,0}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
181 result.element({6,2,4,0}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
182 result.element({6,2,6,1}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
183 result.element({6,2,6,2}) = ((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
184 result.element({6,2,8,1}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
185 result.element({6,2,8,2}) = -((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
186 result.element({6,2,10,3}) = (-2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
187 result.element({7,1,0,1}) = ((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
188 result.element({7,1,0,2}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
189 result.element({7,1,1,0}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
190 result.element({7,1,3,0}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
191 result.element({7,1,5,1}) = -((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
192 result.element({7,1,5,2}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
193 result.element({7,1,7,1}) = ((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
194 result.element({7,1,7,2}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
195 result.element({7,1,9,3}) = (-2*(1 + rC)*rt*(-1 + wSq))/mSqq;
196 result.element({7,2,0,1}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
197 result.element({7,2,0,2}) = ((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
198 result.element({7,2,1,0}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
199 result.element({7,2,3,0}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
200 result.element({7,2,5,1}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
201 result.element({7,2,5,2}) = -((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
202 result.element({7,2,7,1}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
203 result.element({7,2,7,2}) = ((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
204 result.element({7,2,9,3}) = (-2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
205 result.element({8,1,2,0}) = ((-1 + rC)*rt*(1 + w))/(2.*mSqq);
206 result.element({8,1,4,0}) = -((-1 + rC)*rt*(1 + w))/(2.*mSqq);
207 result.element({8,1,6,1}) = -((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
208 result.element({8,1,6,2}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
209 result.element({8,1,8,1}) = ((1 + w)*(mSqq*rCp1Sq*(-1 + w) + rtSq*(1 + 2*w - 2*rC*(2 + w) + rCSq*(1 + 2*w))))/(3.*mSqqSq);
210 result.element({8,1,8,2}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
211 result.element({8,1,10,3}) = (2*(1 + rC)*rt*(-1 + wSq))/mSqq;
212 result.element({8,2,2,0}) = ((1 + rC)*rt*(-1 + w))/(2.*mSqq);
213 result.element({8,2,4,0}) = -((1 + rC)*rt*(-1 + w))/(2.*mSqq);
214 result.element({8,2,6,1}) = -((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
215 result.element({8,2,6,2}) = -((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
216 result.element({8,2,8,1}) = ((-1 + rCSq)*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqqSq);
217 result.element({8,2,8,2}) = ((-1 + w)*(mSqq*rCm1Sq*(1 + w) + rtSq*(-1 + 2*rC*(-2 + w) + 2*w + rCSq*(-1 + 2*w))))/(3.*mSqqSq);
218 result.element({8,2,10,3}) = (2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
219 result.element({9,3,0,1}) = (-2*(1 + rC)*rt*(-1 + wSq))/mSqq;
220 result.element({9,3,0,2}) = (-2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
221 result.element({9,3,5,1}) = (2*(1 + rC)*rt*(-1 + wSq))/mSqq;
222 result.element({9,3,5,2}) = (2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
223 result.element({9,3,7,1}) = (-2*(1 + rC)*rt*(-1 + wSq))/mSqq;
224 result.element({9,3,7,2}) = (-2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
225 result.element({9,3,9,3}) = (8*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqq);
226 result.element({10,3,6,1}) = (-2*(1 + rC)*rt*(-1 + wSq))/mSqq;
227 result.element({10,3,6,2}) = (-2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
228 result.element({10,3,8,1}) = (2*(1 + rC)*rt*(-1 + wSq))/mSqq;
229 result.element({10,3,8,2}) = (2*(-1 + rC)*rt*(-1 + wSq))/mSqq;
230 result.element({10,3,10,3}) = (8*(mSqq + 2*rtSq)*(-1 + wSq))/(3.*mSqq);
TensorData makeEmptySparse(const IndexList &dimensions, const LabelsList &labels)
LabelsList labels() const
get the labels of all the indices at once
static constexpr double GFermi
Tensor indices label definitions.
Sparse tensor data container.
Multidimensional tensor class with complex numbers as elements.
Various numerical constants.
Hammer particle data class.
BoundaryFunction makeQ2Function(double qmin, double qmax)
static constexpr double pi