File indexing completed on 2023-05-29 02:55:21
0001
0002
0003
0004
0005 template <typename Tf, typename Ti, typename TfLL1, typename Tf11, typename TfLLL>
0006 static inline void helixAtRFromIterativeCCS_impl(const Tf& __restrict__ inPar,
0007 const Ti& __restrict__ inChg,
0008 const Tf11& __restrict__ msRad,
0009 TfLL1& __restrict__ outPar,
0010 TfLLL& __restrict__ errorProp,
0011 Ti& __restrict__ outFailFlag,
0012 const int nmin,
0013 const int nmax,
0014 const int N_proc,
0015 const PropagationFlags& pf) {
0016
0017
0018 #pragma omp simd
0019 for (int n = nmin; n < nmax; ++n) {
0020
0021 errorProp(n, 0, 0) = 1.f;
0022 errorProp(n, 1, 1) = 1.f;
0023 errorProp(n, 2, 2) = 1.f;
0024 errorProp(n, 3, 3) = 1.f;
0025 errorProp(n, 4, 4) = 1.f;
0026 errorProp(n, 5, 5) = 1.f;
0027 }
0028 float r0[nmax - nmin];
0029 #pragma omp simd
0030 for (int n = nmin; n < nmax; ++n) {
0031
0032 r0[n - nmin] = hipo(inPar(n, 0, 0), inPar(n, 1, 0));
0033 }
0034 float k[nmax - nmin];
0035 if (pf.use_param_b_field) {
0036 #pragma omp simd
0037 for (int n = nmin; n < nmax; ++n) {
0038 k[n - nmin] = inChg(n, 0, 0) * 100.f / (-Const::sol * Config::bFieldFromZR(inPar(n, 2, 0), r0[n - nmin]));
0039 }
0040 } else {
0041 #pragma omp simd
0042 for (int n = nmin; n < nmax; ++n) {
0043 k[n - nmin] = inChg(n, 0, 0) * 100.f / (-Const::sol * Config::Bfield);
0044 }
0045 }
0046 float r[nmax - nmin];
0047 #pragma omp simd
0048 for (int n = nmin; n < nmax; ++n) {
0049 r[n - nmin] = msRad(n, 0, 0);
0050 }
0051 float xin[nmax - nmin];
0052 float yin[nmax - nmin];
0053 float ipt[nmax - nmin];
0054 float phiin[nmax - nmin];
0055 float theta[nmax - nmin];
0056 #pragma omp simd
0057 for (int n = nmin; n < nmax; ++n) {
0058
0059
0060
0061
0062
0063 xin[n - nmin] = inPar(n, 0, 0);
0064 yin[n - nmin] = inPar(n, 1, 0);
0065 ipt[n - nmin] = inPar(n, 3, 0);
0066 phiin[n - nmin] = inPar(n, 4, 0);
0067 theta[n - nmin] = inPar(n, 5, 0);
0068
0069
0070 }
0071
0072 for (int n = nmin; n < nmax; ++n) {
0073 dprint_np(n,
0074 "input parameters"
0075 << " inPar(n, 0, 0)=" << std::setprecision(9) << inPar(n, 0, 0) << " inPar(n, 1, 0)="
0076 << std::setprecision(9) << inPar(n, 1, 0) << " inPar(n, 2, 0)=" << std::setprecision(9)
0077 << inPar(n, 2, 0) << " inPar(n, 3, 0)=" << std::setprecision(9) << inPar(n, 3, 0)
0078 << " inPar(n, 4, 0)=" << std::setprecision(9) << inPar(n, 4, 0)
0079 << " inPar(n, 5, 0)=" << std::setprecision(9) << inPar(n, 5, 0));
0080 }
0081
0082 float kinv[nmax - nmin];
0083 float pt[nmax - nmin];
0084 #pragma omp simd
0085 for (int n = nmin; n < nmax; ++n) {
0086 kinv[n - nmin] = 1.f / k[n - nmin];
0087 pt[n - nmin] = 1.f / ipt[n - nmin];
0088 }
0089 float D[nmax - nmin];
0090 float cosa[nmax - nmin];
0091 float sina[nmax - nmin];
0092 float cosah[nmax - nmin];
0093 float sinah[nmax - nmin];
0094 float id[nmax - nmin];
0095
0096 #pragma omp simd
0097 for (int n = nmin; n < nmax; ++n) {
0098 D[n - nmin] = 0.;
0099 }
0100
0101
0102 float cosPorT[nmax - nmin];
0103 float sinPorT[nmax - nmin];
0104 #pragma omp simd
0105 for (int n = nmin; n < nmax; ++n) {
0106 cosPorT[n - nmin] = std::cos(phiin[n - nmin]);
0107 }
0108 #pragma omp simd
0109 for (int n = nmin; n < nmax; ++n) {
0110 sinPorT[n - nmin] = std::sin(phiin[n - nmin]);
0111 }
0112
0113 float pxin[nmax - nmin];
0114 float pyin[nmax - nmin];
0115 #pragma omp simd
0116 for (int n = nmin; n < nmax; ++n) {
0117 pxin[n - nmin] = cosPorT[n - nmin] * pt[n - nmin];
0118 pyin[n - nmin] = sinPorT[n - nmin] * pt[n - nmin];
0119 }
0120
0121 for (int n = nmin; n < nmax; ++n) {
0122 dprint_np(n,
0123 "k=" << std::setprecision(9) << k[n - nmin] << " pxin=" << std::setprecision(9) << pxin[n - nmin]
0124 << " pyin=" << std::setprecision(9) << pyin[n - nmin] << " cosPorT=" << std::setprecision(9)
0125 << cosPorT[n - nmin] << " sinPorT=" << std::setprecision(9) << sinPorT[n - nmin]
0126 << " pt=" << std::setprecision(9) << pt[n - nmin]);
0127 }
0128
0129 float dDdx[nmax - nmin];
0130 float dDdy[nmax - nmin];
0131 float dDdipt[nmax - nmin];
0132 float dDdphi[nmax - nmin];
0133
0134 #pragma omp simd
0135 for (int n = nmin; n < nmax; ++n) {
0136 dDdipt[n - nmin] = 0.;
0137 dDdphi[n - nmin] = 0.;
0138 }
0139 #pragma omp simd
0140 for (int n = nmin; n < nmax; ++n) {
0141
0142 dDdx[n - nmin] = r0[n - nmin] > 0.f ? -xin[n - nmin] / r0[n - nmin] : 0.f;
0143 }
0144
0145 #pragma omp simd
0146 for (int n = nmin; n < nmax; ++n) {
0147 dDdy[n - nmin] = r0[n - nmin] > 0.f ? -yin[n - nmin] / r0[n - nmin] : 0.f;
0148 }
0149
0150 float oodotp[nmax - nmin];
0151 float x[nmax - nmin];
0152 float y[nmax - nmin];
0153 float oor0[nmax - nmin];
0154 float dadipt[nmax - nmin];
0155 float dadx[nmax - nmin];
0156 float dady[nmax - nmin];
0157 float pxca[nmax - nmin];
0158 float pxsa[nmax - nmin];
0159 float pyca[nmax - nmin];
0160 float pysa[nmax - nmin];
0161 float tmp[nmax - nmin];
0162 float tmpx[nmax - nmin];
0163 float tmpy[nmax - nmin];
0164 float pxinold[nmax - nmin];
0165
0166 CMS_UNROLL_LOOP_COUNT(Config::Niter)
0167 for (int i = 0; i < Config::Niter; ++i) {
0168 #pragma omp simd
0169 for (int n = nmin; n < nmax; ++n) {
0170
0171 r0[n - nmin] = hipo(outPar(n, 0, 0), outPar(n, 1, 0));
0172 }
0173
0174
0175
0176
0177
0178
0179
0180 #pragma omp simd
0181 for (int n = nmin; n < nmax; ++n) {
0182 oodotp[n - nmin] =
0183 r0[n - nmin] * pt[n - nmin] / (pxin[n - nmin] * outPar(n, 0, 0) + pyin[n - nmin] * outPar(n, 1, 0));
0184 }
0185
0186 #pragma omp simd
0187 for (int n = nmin; n < nmax; ++n) {
0188 if (oodotp[n - nmin] > 5.0f || oodotp[n - nmin] < 0)
0189 {
0190 outFailFlag(n, 0, 0) = 1;
0191 oodotp[n - nmin] = 0.0f;
0192 } else if (r[n - nmin] - r0[n - nmin] < 0.0f && pt[n - nmin] < 1.0f) {
0193
0194 oodotp[n - nmin] = 1.0f + (oodotp[n - nmin] - 1.0f) * pt[n - nmin];
0195 }
0196 }
0197
0198 #pragma omp simd
0199 for (int n = nmin; n < nmax; ++n) {
0200
0201
0202 id[n - nmin] = (r[n - nmin] - r0[n - nmin]) * oodotp[n - nmin];
0203 }
0204
0205 #pragma omp simd
0206 for (int n = nmin; n < nmax; ++n) {
0207 D[n - nmin] += id[n - nmin];
0208 }
0209
0210 if constexpr (Config::useTrigApprox) {
0211 #if !defined(__INTEL_COMPILER)
0212 #pragma omp simd
0213 #endif
0214 for (int n = nmin; n < nmax; ++n) {
0215 sincos4(id[n - nmin] * ipt[n - nmin] * kinv[n - nmin] * 0.5f, sinah[n - nmin], cosah[n - nmin]);
0216 }
0217 } else {
0218 #if !defined(__INTEL_COMPILER)
0219 #pragma omp simd
0220 #endif
0221 for (int n = nmin; n < nmax; ++n) {
0222 cosah[n - nmin] = std::cos(id[n - nmin] * ipt[n - nmin] * kinv[n - nmin] * 0.5f);
0223 sinah[n - nmin] = std::sin(id[n - nmin] * ipt[n - nmin] * kinv[n - nmin] * 0.5f);
0224 }
0225 }
0226
0227 #pragma omp simd
0228 for (int n = nmin; n < nmax; ++n) {
0229 cosa[n - nmin] = 1.f - 2.f * sinah[n - nmin] * sinah[n - nmin];
0230 sina[n - nmin] = 2.f * sinah[n - nmin] * cosah[n - nmin];
0231 }
0232
0233 for (int n = nmin; n < nmax; ++n) {
0234 dprint_np(n,
0235 "Attempt propagation from r="
0236 << r0[n - nmin] << " to r=" << r[n - nmin] << std::endl
0237 << " x=" << xin[n - nmin] << " y=" << yin[n - nmin] << " z=" << inPar(n, 2, 0)
0238 << " px=" << pxin[n - nmin] << " py=" << pyin[n - nmin]
0239 << " pz=" << pt[n - nmin] * std::tan(theta[n - nmin]) << " q=" << inChg(n, 0, 0) << std::endl
0240 << " r=" << std::setprecision(9) << r[n - nmin] << " r0=" << std::setprecision(9) << r0[n - nmin]
0241 << " id=" << std::setprecision(9) << id[n - nmin] << " dr=" << std::setprecision(9)
0242 << r[n - nmin] - r0[n - nmin] << " cosa=" << cosa[n - nmin] << " sina=" << sina[n - nmin]
0243 << " dir_cos(rad,pT)=" << 1.0f / oodotp[n]);
0244 }
0245
0246
0247 if (i + 1 != Config::Niter) {
0248 #pragma omp simd
0249 for (int n = nmin; n < nmax; ++n) {
0250 x[n - nmin] = outPar(n, 0, 0);
0251 y[n - nmin] = outPar(n, 1, 0);
0252 }
0253 #pragma omp simd
0254 for (int n = nmin; n < nmax; ++n) {
0255 oor0[n - nmin] =
0256 (r0[n - nmin] > 0.f && std::abs(r[n - nmin] - r0[n - nmin]) > 0.0001f) ? 1.f / r0[n - nmin] : 0.f;
0257 }
0258 #pragma omp simd
0259 for (int n = nmin; n < nmax; ++n) {
0260 dadipt[n - nmin] = id[n - nmin] * kinv[n - nmin];
0261 dadx[n - nmin] = -x[n - nmin] * ipt[n - nmin] * kinv[n - nmin] * oor0[n - nmin];
0262 dady[n - nmin] = -y[n - nmin] * ipt[n - nmin] * kinv[n - nmin] * oor0[n - nmin];
0263 pxca[n - nmin] = pxin[n - nmin] * cosa[n - nmin];
0264 pxsa[n - nmin] = pxin[n - nmin] * sina[n - nmin];
0265 pyca[n - nmin] = pyin[n - nmin] * cosa[n - nmin];
0266 pysa[n - nmin] = pyin[n - nmin] * sina[n - nmin];
0267 tmpx[n - nmin] = k[n - nmin] * dadx[n - nmin];
0268 }
0269
0270 #pragma omp simd
0271 for (int n = nmin; n < nmax; ++n) {
0272 dDdx[n - nmin] -= (x[n - nmin] * (1.f + tmpx[n - nmin] * (pxca[n - nmin] - pysa[n - nmin])) +
0273 y[n - nmin] * tmpx[n - nmin] * (pyca[n - nmin] + pxsa[n - nmin])) *
0274 oor0[n - nmin];
0275 }
0276
0277 #pragma omp simd
0278 for (int n = nmin; n < nmax; ++n) {
0279 tmpy[n - nmin] = k[n - nmin] * dady[n - nmin];
0280 }
0281 #pragma omp simd
0282 for (int n = nmin; n < nmax; ++n) {
0283 dDdy[n - nmin] -= (x[n - nmin] * tmpy[n - nmin] * (pxca[n - nmin] - pysa[n - nmin]) +
0284 y[n - nmin] * (1.f + tmpy[n - nmin] * (pyca[n - nmin] + pxsa[n - nmin]))) *
0285 oor0[n - nmin];
0286 }
0287 #pragma omp simd
0288 for (int n = nmin; n < nmax; ++n) {
0289
0290 tmp[n - nmin] = dadipt[n - nmin] * ipt[n - nmin];
0291 }
0292 #pragma omp simd
0293 for (int n = nmin; n < nmax; ++n) {
0294 dDdipt[n - nmin] -= k[n - nmin] *
0295 (x[n - nmin] * (pxca[n - nmin] * tmp[n - nmin] - pysa[n - nmin] * tmp[n - nmin] -
0296 pyca[n - nmin] - pxsa[n - nmin] + pyin[n - nmin]) +
0297 y[n - nmin] * (pyca[n - nmin] * tmp[n - nmin] + pxsa[n - nmin] * tmp[n - nmin] -
0298 pysa[n - nmin] + pxca[n - nmin] - pxin[n - nmin])) *
0299 pt[n - nmin] * oor0[n - nmin];
0300 }
0301 #pragma omp simd
0302 for (int n = nmin; n < nmax; ++n) {
0303 dDdphi[n - nmin] += k[n - nmin] *
0304 (x[n - nmin] * (pysa[n - nmin] - pxin[n - nmin] + pxca[n - nmin]) -
0305 y[n - nmin] * (pxsa[n - nmin] - pyin[n - nmin] + pyca[n - nmin])) *
0306 oor0[n - nmin];
0307 }
0308 }
0309
0310 #pragma omp simd
0311 for (int n = nmin; n < nmax; ++n) {
0312
0313 outPar(n, 0, 0) = outPar(n, 0, 0) + 2.f * k[n - nmin] * sinah[n - nmin] *
0314 (pxin[n - nmin] * cosah[n - nmin] - pyin[n - nmin] * sinah[n - nmin]);
0315 outPar(n, 1, 0) = outPar(n, 1, 0) + 2.f * k[n - nmin] * sinah[n - nmin] *
0316 (pyin[n - nmin] * cosah[n - nmin] + pxin[n - nmin] * sinah[n - nmin]);
0317 pxinold[n - nmin] = pxin[n - nmin];
0318 pxin[n - nmin] = pxin[n - nmin] * cosa[n - nmin] - pyin[n - nmin] * sina[n - nmin];
0319 pyin[n - nmin] = pyin[n - nmin] * cosa[n - nmin] + pxinold[n - nmin] * sina[n - nmin];
0320 }
0321 for (int n = nmin; n < nmax; ++n) {
0322 dprint_np(n,
0323 "outPar(n, 0, 0)=" << outPar(n, 0, 0) << " outPar(n, 1, 0)=" << outPar(n, 1, 0)
0324 << " pxin=" << pxin[n - nmin] << " pyin=" << pyin[n - nmin]);
0325 }
0326 }
0327
0328 float alpha[nmax - nmin];
0329 float dadphi[nmax - nmin];
0330
0331 #pragma omp simd
0332 for (int n = nmin; n < nmax; ++n) {
0333 alpha[n - nmin] = D[n - nmin] * ipt[n - nmin] * kinv[n - nmin];
0334 dadx[n - nmin] = dDdx[n - nmin] * ipt[n - nmin] * kinv[n - nmin];
0335 dady[n - nmin] = dDdy[n - nmin] * ipt[n - nmin] * kinv[n - nmin];
0336 dadipt[n - nmin] = (ipt[n - nmin] * dDdipt[n - nmin] + D[n - nmin]) * kinv[n - nmin];
0337 dadphi[n - nmin] = dDdphi[n - nmin] * ipt[n - nmin] * kinv[n - nmin];
0338 }
0339
0340 if constexpr (Config::useTrigApprox) {
0341 #pragma omp simd
0342 for (int n = nmin; n < nmax; ++n) {
0343 sincos4(alpha[n - nmin], sina[n - nmin], cosa[n - nmin]);
0344 }
0345 } else {
0346 #pragma omp simd
0347 for (int n = nmin; n < nmax; ++n) {
0348 cosa[n - nmin] = std::cos(alpha[n - nmin]);
0349 sina[n - nmin] = std::sin(alpha[n - nmin]);
0350 }
0351 }
0352 #pragma omp simd
0353 for (int n = nmin; n < nmax; ++n) {
0354 errorProp(n, 0, 0) = 1.f + k[n - nmin] * dadx[n - nmin] *
0355 (cosPorT[n - nmin] * cosa[n - nmin] - sinPorT[n - nmin] * sina[n - nmin]) *
0356 pt[n - nmin];
0357 errorProp(n, 0, 1) = k[n - nmin] * dady[n - nmin] *
0358 (cosPorT[n - nmin] * cosa[n - nmin] - sinPorT[n - nmin] * sina[n - nmin]) * pt[n - nmin];
0359 errorProp(n, 0, 2) = 0.f;
0360 errorProp(n, 0, 3) =
0361 k[n - nmin] *
0362 (cosPorT[n - nmin] * (ipt[n - nmin] * dadipt[n - nmin] * cosa[n - nmin] - sina[n - nmin]) +
0363 sinPorT[n - nmin] * ((1.f - cosa[n - nmin]) - ipt[n - nmin] * dadipt[n - nmin] * sina[n - nmin])) *
0364 pt[n - nmin] * pt[n - nmin];
0365 errorProp(n, 0, 4) =
0366 k[n - nmin] *
0367 (cosPorT[n - nmin] * dadphi[n - nmin] * cosa[n - nmin] - sinPorT[n - nmin] * dadphi[n - nmin] * sina[n - nmin] -
0368 sinPorT[n - nmin] * sina[n - nmin] + cosPorT[n - nmin] * cosa[n - nmin] - cosPorT[n - nmin]) *
0369 pt[n - nmin];
0370 errorProp(n, 0, 5) = 0.f;
0371 }
0372
0373 #pragma omp simd
0374 for (int n = nmin; n < nmax; ++n) {
0375 errorProp(n, 1, 0) = k[n - nmin] * dadx[n - nmin] *
0376 (sinPorT[n - nmin] * cosa[n - nmin] + cosPorT[n - nmin] * sina[n - nmin]) * pt[n - nmin];
0377 errorProp(n, 1, 1) = 1.f + k[n - nmin] * dady[n - nmin] *
0378 (sinPorT[n - nmin] * cosa[n - nmin] + cosPorT[n - nmin] * sina[n - nmin]) *
0379 pt[n - nmin];
0380 errorProp(n, 1, 2) = 0.f;
0381 errorProp(n, 1, 3) =
0382 k[n - nmin] *
0383 (sinPorT[n - nmin] * (ipt[n - nmin] * dadipt[n - nmin] * cosa[n - nmin] - sina[n - nmin]) +
0384 cosPorT[n - nmin] * (ipt[n - nmin] * dadipt[n - nmin] * sina[n - nmin] - (1.f - cosa[n - nmin]))) *
0385 pt[n - nmin] * pt[n - nmin];
0386 errorProp(n, 1, 4) =
0387 k[n - nmin] *
0388 (sinPorT[n - nmin] * dadphi[n - nmin] * cosa[n - nmin] + cosPorT[n - nmin] * dadphi[n - nmin] * sina[n - nmin] +
0389 sinPorT[n - nmin] * cosa[n - nmin] + cosPorT[n - nmin] * sina[n - nmin] - sinPorT[n - nmin]) *
0390 pt[n - nmin];
0391 errorProp(n, 1, 5) = 0.f;
0392 }
0393
0394 #pragma omp simd
0395 for (int n = nmin; n < nmax; ++n) {
0396
0397 cosPorT[n - nmin] = std::cos(theta[n - nmin]);
0398 }
0399
0400 #pragma omp simd
0401 for (int n = nmin; n < nmax; ++n) {
0402 sinPorT[n - nmin] = std::sin(theta[n - nmin]);
0403 }
0404
0405 #pragma omp simd
0406 for (int n = nmin; n < nmax; ++n) {
0407
0408 sinPorT[n - nmin] = 1.f / sinPorT[n - nmin];
0409 }
0410
0411 #pragma omp simd
0412 for (int n = nmin; n < nmax; ++n) {
0413 outPar(n, 2, 0) =
0414 inPar(n, 2, 0) + k[n - nmin] * alpha[n - nmin] * cosPorT[n - nmin] * pt[n - nmin] * sinPorT[n - nmin];
0415 errorProp(n, 2, 0) = k[n - nmin] * cosPorT[n - nmin] * dadx[n - nmin] * pt[n - nmin] * sinPorT[n - nmin];
0416 errorProp(n, 2, 1) = k[n - nmin] * cosPorT[n - nmin] * dady[n - nmin] * pt[n - nmin] * sinPorT[n - nmin];
0417 errorProp(n, 2, 2) = 1.f;
0418 errorProp(n, 2, 3) = k[n - nmin] * cosPorT[n - nmin] * (ipt[n - nmin] * dadipt[n - nmin] - alpha[n - nmin]) *
0419 pt[n - nmin] * pt[n - nmin] * sinPorT[n - nmin];
0420 errorProp(n, 2, 4) = k[n - nmin] * dadphi[n - nmin] * cosPorT[n - nmin] * pt[n - nmin] * sinPorT[n - nmin];
0421 errorProp(n, 2, 5) = -k[n - nmin] * alpha[n - nmin] * pt[n - nmin] * sinPorT[n - nmin] * sinPorT[n - nmin];
0422 }
0423
0424 #pragma omp simd
0425 for (int n = nmin; n < nmax; ++n) {
0426 outPar(n, 3, 0) = ipt[n - nmin];
0427 errorProp(n, 3, 0) = 0.f;
0428 errorProp(n, 3, 1) = 0.f;
0429 errorProp(n, 3, 2) = 0.f;
0430 errorProp(n, 3, 3) = 1.f;
0431 errorProp(n, 3, 4) = 0.f;
0432 errorProp(n, 3, 5) = 0.f;
0433 }
0434
0435 #pragma omp simd
0436 for (int n = nmin; n < nmax; ++n) {
0437 outPar(n, 4, 0) = inPar(n, 4, 0) + alpha[n - nmin];
0438 errorProp(n, 4, 0) = dadx[n - nmin];
0439 errorProp(n, 4, 1) = dady[n - nmin];
0440 errorProp(n, 4, 2) = 0.f;
0441 errorProp(n, 4, 3) = dadipt[n - nmin];
0442 errorProp(n, 4, 4) = 1.f + dadphi[n - nmin];
0443 errorProp(n, 4, 5) = 0.f;
0444 }
0445
0446 #pragma omp simd
0447 for (int n = nmin; n < nmax; ++n) {
0448 outPar(n, 5, 0) = theta[n - nmin];
0449 errorProp(n, 5, 0) = 0.f;
0450 errorProp(n, 5, 1) = 0.f;
0451 errorProp(n, 5, 2) = 0.f;
0452 errorProp(n, 5, 3) = 0.f;
0453 errorProp(n, 5, 4) = 0.f;
0454 errorProp(n, 5, 5) = 1.f;
0455 }
0456
0457 for (int n = nmin; n < nmax; ++n) {
0458 dprint_np(n,
0459 "propagation end, dump parameters\n"
0460 << " pos = " << outPar(n, 0, 0) << " " << outPar(n, 1, 0) << " " << outPar(n, 2, 0) << "\t\t r="
0461 << std::sqrt(outPar(n, 0, 0) * outPar(n, 0, 0) + outPar(n, 1, 0) * outPar(n, 1, 0)) << std::endl
0462 << " mom = " << std::cos(outPar(n, 4, 0)) / outPar(n, 3, 0) << " "
0463 << std::sin(outPar(n, 4, 0)) / outPar(n, 3, 0) << " " << 1. / (outPar(n, 3, 0) * tan(outPar(n, 5, 0)))
0464 << "\t\tpT=" << 1. / std::abs(outPar(n, 3, 0)) << std::endl);
0465 }
0466
0467 #ifdef DEBUG
0468 for (int n = nmin; n < nmax; ++n) {
0469 if (debug && g_debug && n < N_proc) {
0470 dmutex_guard;
0471 std::cout << n << ": jacobian" << std::endl;
0472 printf("%5f %5f %5f %5f %5f %5f\n",
0473 errorProp(n, 0, 0),
0474 errorProp(n, 0, 1),
0475 errorProp(n, 0, 2),
0476 errorProp(n, 0, 3),
0477 errorProp(n, 0, 4),
0478 errorProp(n, 0, 5));
0479 printf("%5f %5f %5f %5f %5f %5f\n",
0480 errorProp(n, 1, 0),
0481 errorProp(n, 1, 1),
0482 errorProp(n, 1, 2),
0483 errorProp(n, 1, 3),
0484 errorProp(n, 1, 4),
0485 errorProp(n, 1, 5));
0486 printf("%5f %5f %5f %5f %5f %5f\n",
0487 errorProp(n, 2, 0),
0488 errorProp(n, 2, 1),
0489 errorProp(n, 2, 2),
0490 errorProp(n, 2, 3),
0491 errorProp(n, 2, 4),
0492 errorProp(n, 2, 5));
0493 printf("%5f %5f %5f %5f %5f %5f\n",
0494 errorProp(n, 3, 0),
0495 errorProp(n, 3, 1),
0496 errorProp(n, 3, 2),
0497 errorProp(n, 3, 3),
0498 errorProp(n, 3, 4),
0499 errorProp(n, 3, 5));
0500 printf("%5f %5f %5f %5f %5f %5f\n",
0501 errorProp(n, 4, 0),
0502 errorProp(n, 4, 1),
0503 errorProp(n, 4, 2),
0504 errorProp(n, 4, 3),
0505 errorProp(n, 4, 4),
0506 errorProp(n, 4, 5));
0507 printf("%5f %5f %5f %5f %5f %5f\n",
0508 errorProp(n, 5, 0),
0509 errorProp(n, 5, 1),
0510 errorProp(n, 5, 2),
0511 errorProp(n, 5, 3),
0512 errorProp(n, 5, 4),
0513 errorProp(n, 5, 5));
0514 printf("\n");
0515 }
0516 }
0517 #endif
0518 }