66 throw runtime_error(
"The no_shape lineshape is only a placeholder, but you tried\n"
67 "to use it like a real lineshape.");
94 assert( nf==f_mono.
nelem() );
101 Numeric gamma2 = gamma * gamma;
104 for (
Index i=0; i<nf; ++i )
106 ls[i] = fac / ( (f_mono[i]-f0) * (f_mono[i]-f0) + gamma2 );
133 assert( nf==f_mono.
nelem() );
141 Numeric sigma2 = sigma * sigma;
142 Numeric fac = 1.0 / (sqrtPI * sigma);
144 for (
Index i=0; i<nf ; ++i )
146 ls[i] = fac * exp( - pow( f_mono[i]-f0, 2) / sigma2 );
167 }
else if (s >= 5.5f) {
169 }
else if (y >= fabs(x) * .195f - .176f) {
251 assert( nf==f_mono.
nelem() );
264 Numeric fac = 1.0 / sigma * sqrt_invPI;
279 static long int bmin, lauf[16] , bmax;
280 static long int imin, imax, stack[80] ;
281 static Numeric a1, a2, a3, a4, a5, a6, a8, b8, c8, d8, e8, f8, g8, h8, a7,
282 b7, c7, d7, e7, f7, o8, p8, q8, r8, s8, t8, g7, h7, o7, p7, q7,
283 r7, s7, t7, b6, c6, d6, e6, b5, c5, d5, e5, b4, c4, d4, b3, c3,
285 static long int i2, i1;
287 static long int stackp, imitte;
297 for (i1=0; i1< (int) nf; i1++)
299 x[(
Index)i1] = (f_mono[(
Index)i1] - f0) / sigma;
310 if (y >= 15.0 || x[0] >= 15.0 || x[nf-1] <= -15.0) {
317 for (i2 = 1; i2 <= 4; ++i2) {
318 for (i1 = 1; i1 <= 4; ++i1) {
319 lauf[i1 + (i2 << 2) - 5] = i2 % 2 * (nf + 1);
324 stack[stackp - 1] = 1;
325 stack[stackp + 19] = nf;
326 stack[stackp + 39] =
bfun6_(y, x[0]);
327 stack[stackp + 59] =
bfun6_(y, x[nf-1]);
329 imin = stack[stackp - 1];
330 imax = stack[stackp + 19];
331 bmin = stack[stackp + 39];
332 bmax = stack[stackp + 59];
334 if (x[(
Index)imax-1] < 0.f) {
336 i__1 = imin, i__2 = lauf[bmin - 1];
337 lauf[bmin - 1] =
min(i__1,i__2);
339 i__1 = imax, i__2 = lauf[bmax + 3];
340 lauf[bmax + 3] =
max(i__1,i__2);
343 }
else if (x[(
Index)imin-1] >= 0.f) {
345 i__1 = imin, i__2 = lauf[bmin + 7];
346 lauf[bmin + 7] =
min(i__1,i__2);
348 i__1 = imax, i__2 = lauf[bmax + 11];
349 lauf[bmax + 11] =
max(i__1,i__2);
354 imitte = (imax + imin) / 2;
355 stack[stackp - 1] = imitte + 1;
356 stack[stackp + 19] = imax;
358 stack[stackp + 59] = bmax;
360 stack[stackp - 1] = imin;
361 stack[stackp + 19] = imitte;
362 stack[stackp + 39] = bmin;
363 stack[stackp + 59] =
bfun6_(y, x[(
Index)imitte-1]);
370 if (lauf[7] >= lauf[3] || lauf[15] >= lauf[11]) {
371 if ((r__1 = y - yps4, fabs(r__1)) > 1e-8f) {
373 a7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
374 y2 * (y2 * (y2 * (2.35944f - y2 * .56419f) - 72.9359f) +
375 571.687f) - 5860.68f) + 40649.2f) - 320772.f) + 1684100.f)
376 - 9694630.f) + 40816800.f) - 1.53575e8f) + 4.56662e8f) -
377 9.86604e8f) + 1.16028e9f);
378 b7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
379 y2 * (y2 * (23.0312f - y2 * 7.33447f) - 234.143f) -
380 2269.19f) + 45251.3f) - 234417.f) + 3599150.f) -
381 7723590.f) + 86482900.f) - 2.91876e8f) + 8.06985e8f) -
382 9.85386e8f) - 5.60505e8f);
383 c7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
384 y2 * (97.6203f - y2 * 44.0068f) + 1097.77f) - 25338.3f) +
385 98079.1f) + 576054.f) - 2.3818e7f) + 22930200.f) -
386 2.04467e8f) + 2.94262e8f) + 2.47157e8f) - 6.51523e8f);
387 d7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
388 228.563f - y2 * 161.358f) + 8381.97f) - 66431.2f) -
389 303569.f) + 2240400.f) + 38311200.f) - 41501300.f) -
390 99622400.f) + 2.70167e8f) - 2.63894e8f);
391 e7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
392 296.38f - y2 * 403.396f) + 23507.6f) - 66212.1f) -
393 1.003e6f) + 468142.f) + 24620100.f) + 5569650.f) +
394 1.40677e8f) - 63177100.f);
395 f7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (125.591f -
396 y2 * 726.113f) + 37544.8f) + 8820.94f) - 934717.f) -
397 1931140.f) - 33289600.f) + 4073820.f) - 16984600.f);
398 g7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (-260.198f - y2 *
399 968.15f) + 37371.9f) + 79902.5f) - 186682.f) - 900010.f)
400 + 7528830.f) - 1231650.f);
401 h7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (-571.645f - y2 * 968.15f)
402 + 23137.1f) + 72520.9f) + 153468.f) + 86407.6f) -
404 o7 = y * (y2 * (y2 * (y2 * (y2 * (-575.164f - y2 * 726.113f) +
405 8073.15f) + 26538.5f) + 49883.8f) - 23586.5f);
406 p7 = y * (y2 * (y2 * (y2 * (-352.467f - y2 * 403.396f) +
407 953.655f) + 2198.86f) - 8009.1f);
408 q7 = y * (y2 * (y2 * (-134.792f - y2 * 161.358f) - 271.202f) -
410 r7 = y * (y2 * (-29.7896f - y2 * 44.0068f) - 77.0535f);
411 s7 = y * (-2.92264f - y2 * 7.33447f);
413 a8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
414 y2 * (y2 * (y2 * (y2 - 3.68288f) + 126.532f) - 955.194f)
415 + 9504.65f) - 70946.1f) + 483737.f) - 2857210.f) +
416 14464700.f) - 61114800.f) + 2.11107e8f) - 5.79099e8f) +
417 1.17022e9f) - 1.5599e9f) + 1.02827e9f;
418 b8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
419 y2 * (y2 * (y2 * 14.f - 40.5117f) + 533.254f) + 3058.26f)
420 - 55600.f) + 498334.f) - 2849540.f) + 13946500.f) -
421 70135800.f) + 2.89676e8f) - 7.53828e8f) + 1.66421e9f) -
422 2.28855e9f) + 1.5599e9f;
423 c8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
424 y2 * (y2 * 91 - 198.876f) - 1500.17f) + 48153.3f) -
425 217801.f) - 1063520.f) + 1.4841e7f) - 46039600.f) +
426 63349600.f) - 6.60078e8f) + 1.06002e9f) - 1.66421e9f) +
428 d8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
429 y2 * 364 - 567.164f) - 16493.7f) + 161461.f) + 280428.f)
430 - 6890020.f) - 6876560.f) + 1.99846e8f) + 54036700.f) +
431 6.60078e8f) - 7.53828e8f) + 5.79099e8f;
432 e8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 *
433 1001 - 1012.79f) - 55582.f) + 240373.f) + 1954700.f) -
434 5257220.f) - 50101700.f) - 1.99846e8f) + 63349600.f) -
435 2.89676e8f) + 2.11107e8f;
436 f8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 2002 -
437 1093.82f) - 106663.f) + 123052.f) + 3043160.f) +
438 5257220.f) - 6876560.f) + 46039600.f) - 70135800.f) +
440 g8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 3003 -
441 486.14f) - 131337.f) - 123052.f) + 1954700.f) + 6890020.f)
442 + 1.4841e7f) - 13946500.f) + 14464700.f;
443 h8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 3432 + 486.14f) -
444 106663.f) - 240373.f) + 280428.f) + 1063520.f) -
445 2849540.f) + 2857210.f;
446 o8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 3003 + 1093.82f) -
447 55582.f) - 161461.f) - 217801.f) - 498334.f) + 483737.f;
448 p8 = y2 * (y2 * (y2 * (y2 * (y2 * 2002 + 1012.79f) - 16493.7f) -
449 48153.3f) - 55600.f) + 70946.1f;
450 q8 = y2 * (y2 * (y2 * (y2 * 1001.f + 567.164f) - 1500.17f) -
451 3058.26f) + 9504.65f;
452 r8 = y2 * (y2 * (y2 * 364 + 198.876f) + 533.254f) + 955.194f;
453 s8 = y2 * (y2 * 91.f + 40.5117f) + 126.532f;
454 t8 = y2 * 14.f + 3.68288f;
457 for (i2 = 1; i2 <= 3; i2 += 2) {
458 i__1 = lauf[((i2 + 1) << 2) - 1];
459 for (i1 = lauf[(i2 << 2) - 1]; i1 <= i__1; ++i1) {
461 ls[(
Index)i1-1] = fac * (exp(y2 - x2) * cos(x[(
Index)i1-1] * ym2) - (a7 + x2 *
462 (b7 + x2 * (c7 + x2 * (d7 + x2 * (e7 + x2 * (f7 + x2
463 * (g7 + x2 * (h7 + x2 * (o7 + x2 * (p7 + x2 * (q7 +
464 x2 * (r7 + x2 * (s7 + x2 * t7))))))))))))) / (a8 + x2
465 * (b8 + x2 * (c8 + x2 * (d8 + x2 * (e8 + x2 * (f8 +
466 x2 * (g8 + x2 * (h8 + x2 * (o8 + x2 * (p8 + x2 * (q8
467 + x2 * (r8 + x2 * (s8 + x2 * (t8 + x2)))))))))))))));
474 if (lauf[6] >= lauf[2] || lauf[14] >= lauf[10]) {
475 if ((r__1 = y - yps3, fabs(r__1)) > 1e-8f) {
477 a5 = y * (y * (y * (y * (y * (y * (y * (y * (y *
478 .564224f + 7.55895f) + 49.5213f) + 204.501f) + 581.746f)
479 + 1174.8f) + 1678.33f) + 1629.76f) + 973.778f) + 272.102f;
480 b5 = y * (y * (y * (y * (y * (y * (y * 2.25689f + 22.6778f)
481 + 100.705f) + 247.198f) + 336.364f) + 220.843f) -
482 2.34403f) - 60.5644f;
483 c5 = y * (y * (y * (y * (y * 3.38534f + 22.6798f) + 52.8454f)
484 + 42.5683f) + 18.546f) + 4.58029f;
485 d5 = y * (y * (y * 2.25689f + 7.56186f) + 1.66203f) - .128922f;
486 e5 = y * .564224f + 9.71457e-4f;
487 a6 = y * (y * (y * (y * (y * (y * (y * (y * (y * (y +
488 13.3988f) + 88.2674f) + 369.199f) + 1074.41f) + 2256.98f)
489 + 3447.63f) + 3764.97f) + 2802.87f) + 1280.83f) +
491 b6 = y * (y * (y * (y * (y * (y * (y * (y * 5.f +
492 53.5952f) + 266.299f) + 793.427f) + 1549.68f) + 2037.31f)
493 + 1758.34f) + 902.306f) + 211.678f;
494 c6 = y * (y * (y * (y * (y * (y * 10.f + 80.3928f) +
495 269.292f) + 479.258f) + 497.302f) + 308.186f) + 78.866f;
496 d6 = y * (y * (y * (y * 10.f + 53.5952f) + 92.7568f) +
497 55.0293f) + 22.0353f;
498 e6 = y * (y * 5.f + 13.3988f) + 1.49645f;
500 for (i2 = 1; i2 <= 3; i2 += 2) {
501 i__1 = lauf[((i2 + 1) << 2) - 2];
502 for (i1 = lauf[(i2 << 2) - 2]; i1 <= i__1; ++i1) {
504 ls[(
Index)i1-1] = fac * (a5 + x2 * (b5 + x2 * (c5 + x2 * (d5 + x2 *
505 e5)))) / (a6 + x2 * (b6 + x2 * (c6 + x2 * (d6 + x2 * (
513 if (lauf[5] >= lauf[1] || lauf[13] >= lauf[9]) {
514 if ((r__1 = y - yps2, fabs(r__1)) > 1e-8f) {
516 a3 = y * (y2 * (y2 * (y2 * .56419f + 3.10304f) + 4.65456f) +
518 b3 = y * (y2 * (y2 * 1.69257f + .56419f) + 2.962f);
519 c3 = y * (y2 * 1.69257f - 2.53885f);
521 a4 = y2 * (y2 * (y2 * (y2 + 6.f) + 10.5f) + 4.5f) + .5625f;
522 b4 = y2 * (y2 * (y2 * 4.f + 6.f) + 9.f) - 4.5f;
523 c4 = y2 * (y2 * 6.f - 6.f) + 10.5f;
526 for (i2 = 1; i2 <= 3; i2 += 2) {
527 i__1 = lauf[((i2 + 1) << 2) - 3];
528 for (i1 = lauf[(i2 << 2) - 3]; i1 <= i__1; ++i1) {
530 ls[(
Index)i1-1] = fac * (a3 + x2 * (b3 + x2 * (c3 + x2 * d3))) / (a4
531 + x2 * (b4 + x2 * (c4 + x2 * (d4 + x2))));
539 if (lauf[4] >= lauf[0] || lauf[12] >= lauf[8]) {
540 if ((r__1 = y - yps1, fabs(r__1)) > 1e-8f) {
548 for (i2 = 1; i2 <= 3; i2 += 2) {
549 i__1 = lauf[((i2 + 1) << 2) - 4];
550 for (i1 = lauf[(i2 << 2) - 4]; i1 <= i__1; ++i1) {
553 ls[(
Index)i1-1] = c1 * (b1 + x2) / (b2 * b2 + a2 * x2);
575 if (x2 * .4081676f + y2 > 21.159543f) {
576 if (x2 * .7019639f + y2 > 1123.14221f) {
582 if (x2 * .20753051f + y2 > 4.20249292f) {
584 }
else if (y >= fabs(x) * .08f - .12f) {
667 assert( nf==f_mono.
nelem() );
679 Numeric fac = 1.0 / sigma * sqrt_invPI;
694 static long bmin, lauf[20] , bmax, imin, imax;
695 static long stack[80] ;
696 static Numeric a0, a1, a2, a3, a4, a5, a6, a7, a8, b8, c8, d8, e8, f8, g8,
697 h8, b7, c7, d7, e7, f7, g7, o8, p8, q8, r8, s8, t8, h7, o7, p7,
698 q7, r7, s7, t7, b6, c6, d6, e6, b5, c5, d5, e5, b4, c4, d4, b3,
702 static long stackp, imitte;
711 for (i1=0; i1< (int) nf; i1++)
713 x[(
Index)i1] = (f_mono[(
Index)i1] - f0) / sigma;
725 if (y >= 23.0 || x[0] >= 39.0 || x[nf-1] <= -39.0) {
732 for (i2 = 1; i2 <= 4; ++i2) {
733 for (i1 = 0; i1 <= 4; ++i1) {
734 lauf[i1 + i2 * 5 - 5] = i2 % 2 * (nf + 1);
739 stack[stackp - 1] = 1;
740 stack[stackp + 19] = nf;
741 stack[stackp + 39] =
bfun3_(y, x[0]);
742 stack[stackp + 59] =
bfun3_(y, x[nf-1]);
744 imin = stack[stackp - 1];
745 imax = stack[stackp + 19];
746 bmin = stack[stackp + 39];
747 bmax = stack[stackp + 59];
749 if (x[(
Index)imax-1] < 0.f) {
751 i__1 = imin, i__2 = lauf[bmin];
752 lauf[bmin] =
min(i__1,i__2);
754 i__1 = imax, i__2 = lauf[bmax + 5];
755 lauf[bmax + 5] =
max(i__1,i__2);
758 }
else if (x[(
Index)imin-1] >= 0.f) {
760 i__1 = imin, i__2 = lauf[bmin + 10];
761 lauf[bmin + 10] =
min(i__1,i__2);
763 i__1 = imax, i__2 = lauf[bmax + 15];
764 lauf[bmax + 15] =
max(i__1,i__2);
769 imitte = (imax + imin) / 2;
770 stack[stackp - 1] = imitte + 1;
771 stack[stackp + 19] = imax;
773 stack[stackp + 59] = bmax;
775 stack[stackp - 1] = imin;
776 stack[stackp + 19] = imitte;
777 stack[stackp + 39] = bmin;
778 stack[stackp + 59] =
bfun3_(y, x[(
Index)imitte-1]);
785 if (lauf[9] >= lauf[4] || lauf[19] >= lauf[14]) {
786 if ((r__1 = y - yps4, fabs(r__1)) > 1e-8f) {
788 a7 = y * (y2 * (y2 * 4.56662e8f - 9.86604e8f) + 1.16028e9f);
789 b7 = y * (y2 * (y2 * 8.06985e8f - 9.85386e8f) - 5.60505e8f);
790 c7 = y * (y2 * (y2 * 2.94262e8f + 2.47157e8f) - 6.51523e8f);
791 d7 = y * (y2 * (2.70167e8f - y2 * 99622400.f) - 2.63894e8f);
792 e7 = y * (y2 * (y2 * 5569650.f + 1.40677e8f) - 63177100.f);
793 f7 = y * (y2 * (4073820.f - y2 * 33289600.f) - 16984600.f);
794 g7 = y * (y2 * (7528830.f - y2 * 900010) - 1231650.f);
795 h7 = y * (y2 * (y2 * 153468 + 86407.6f) - 610622.f);
796 o7 = y * (y2 * (y2 * 26538.5f + 49883.8f) - 23586.5f);
797 p7 = y * (y2 * (y2 * 953.655f + 2198.86f) - 8009.1f);
798 q7 = y * (y2 * (-271.202f - y2 * 134.792f) - 622.056f);
799 r7 = y * (y2 * (-29.7896f - y2 * 44.0068f) - 77.0535f);
800 s7 = y * (-2.92264f - y2 * 7.33447f);
802 a8 = y2 * (y2 * 1.17022e9f - 1.5599e9f) + 1.02827e9f;
803 b8 = y2 * (y2 * 1.66421e9f - 2.28855e9f) + 1.5599e9f;
804 c8 = y2 * (y2 * 1.06002e9f - 1.66421e9f) + 1.17022e9f;
805 d8 = y2 * (y2 * 6.60078e8f - 7.53828e8f) + 5.79099e8f;
806 e8 = y2 * (y2 * 63349600.f - 2.89676e8f) + 2.11107e8f;
807 f8 = y2 * (y2 * 46039600.f - 70135800.f) + 61114800.f;
808 g8 = y2 * (y2 * 1.4841e7f - 13946500.f) + 14464700.f;
809 h8 = y2 * (y2 * 1063520.f - 2849540.f) + 2857210.f;
810 o8 = y2 * (-498334.f - y2 * 217801.f) + 483737.f;
811 p8 = y2 * (-55600.f - y2 * 48153.3f) + 70946.1f;
812 q8 = y2 * (-3058.26f - y2 * 1500.17f) + 9504.65f;
813 r8 = y2 * (y2 * 198.876f + 533.254f) + 955.194f;
814 s8 = y2 * (y2 * 91.f + 40.5117f) + 126.532f;
815 t8 = y2 * 14.f + 3.68288f;
818 for (i2 = 1; i2 <= 3; i2 += 2) {
819 i__1 = lauf[(i2 + 1) * 5 - 1];
820 for (i1 = lauf[i2 * 5 - 1]; i1 <= i__1; ++i1) {
822 ls[(
Index)i1-1] = fac * (exp(y2 - x2) * cos(x[(
Index)i1-1] * ym2) - (a7 + x2 *
823 (b7 + x2 * (c7 + x2 * (d7 + x2 * (e7 + x2 * (f7 + x2
824 * (g7 + x2 * (h7 + x2 * (o7 + x2 * (p7 + x2 * (q7 +
825 x2 * (r7 + x2 * (s7 + x2 * t7))))))))))))) / (a8 + x2
826 * (b8 + x2 * (c8 + x2 * (d8 + x2 * (e8 + x2 * (f8 +
827 x2 * (g8 + x2 * (h8 + x2 * (o8 + x2 * (p8 + x2 * (q8
828 + x2 * (r8 + x2 * (s8 + x2 * (t8 + x2)))))))))))))));
835 if (lauf[8] >= lauf[3] || lauf[18] >= lauf[13]) {
836 if ((r__1 = y - yps3, fabs(r__1)) > 1e-8f) {
838 a5 = y * (y * (y * (y * (y * (y * (y * (y * (y *
839 .564224f + 7.55895f) + 49.5213f) + 204.501f) + 581.746f)
840 + 1174.8f) + 1678.33f) + 1629.76f) + 973.778f) + 272.102f;
841 b5 = y * (y * (y * (y * (y * (y * (y * 2.25689f + 22.6778f)
842 + 100.705f) + 247.198f) + 336.364f) + 220.843f) -
843 2.34403f) - 60.5644f;
844 c5 = y * (y * (y * (y * (y * 3.38534f + 22.6798f) + 52.8454f)
845 + 42.5683f) + 18.546f) + 4.58029f;
846 d5 = y * (y * (y * 2.25689f + 7.56186f) + 1.66203f) - .128922f;
847 e5 = y * .564224f + 9.71457e-4f;
848 a6 = y * (y * (y * (y * (y * (y * (y * (y * (y * (y +
849 13.3988f) + 88.2674f) + 369.199f) + 1074.41f) + 2256.98f)
850 + 3447.63f) + 3764.97f) + 2802.87f) + 1280.83f) +
852 b6 = y * (y * (y * (y * (y * (y * (y * (y * 5.f +
853 53.5952f) + 266.299f) + 793.427f) + 1549.68f) + 2037.31f)
854 + 1758.34f) + 902.306f) + 211.678f;
855 c6 = y * (y * (y * (y * (y * (y * 10.f + 80.3928f) +
856 269.292f) + 479.258f) + 497.302f) + 308.186f) + 78.866f;
857 d6 = y * (y * (y * (y * 10.f + 53.5952f) + 92.7568f) +
858 55.0293f) + 22.0353f;
859 e6 = y * (y * 5.f + 13.3988f) + 1.49645f;
861 for (i2 = 1; i2 <= 3; i2 += 2) {
862 i__1 = lauf[(i2 + 1) * 5 - 2];
863 for (i1 = lauf[i2 * 5 - 2]; i1 <= i__1; ++i1) {
865 ls[(
Index)i1-1] = fac * (a5 + x2 * (b5 + x2 * (c5 + x2 * (d5 + x2 *
866 e5)))) / (a6 + x2 * (b6 + x2 * (c6 + x2 * (d6 + x2 * (
874 if (lauf[7] >= lauf[2] || lauf[17] >= lauf[12]) {
875 if ((r__1 = y - yps2, fabs(r__1)) > 1e-8f) {
877 a3 = y * (y2 * (y2 * (y2 * .56419f + 3.10304f) + 4.65456f) +
879 b3 = y * (y2 * (y2 * 1.69257f + .56419f) + 2.962f);
880 c3 = y * (y2 * 1.69257f - 2.53885f);
882 a4 = y2 * (y2 * (y2 * (y2 + 6.f) + 10.5f) + 4.5f) + .5625f;
883 b4 = y2 * (y2 * (y2 * 4.f + 6.f) + 9.f) - 4.5f;
884 c4 = y2 * (y2 * 6.f - 6.f) + 10.5f;
887 for (i2 = 1; i2 <= 3; i2 += 2) {
888 i__1 = lauf[(i2 + 1) * 5 - 3];
889 for (i1 = lauf[i2 * 5 - 3]; i1 <= i__1; ++i1) {
891 ls[(
Index)i1-1] = fac * (a3 + x2 * (b3 + x2 * (c3 + x2 * d3))) / (a4
892 + x2 * (b4 + x2 * (c4 + x2 * (d4 + x2))));
899 if (lauf[6] >= lauf[1] || lauf[16] >= lauf[11]) {
900 if ((r__1 = y - yps1, fabs(r__1)) > 1e-8f) {
908 for (i2 = 1; i2 <= 3; i2 += 2) {
909 i__1 = lauf[(i2 + 1) * 5 - 4];
910 for (i1 = lauf[i2 * 5 - 4]; i1 <= i__1; ++i1) {
913 ls[(
Index)i1-1] = c1 * (b1 + x2) / (b2 * b2 + a2 * x2);
921 if (lauf[5] >= lauf[0] || lauf[15] >= lauf[10]) {
922 if ((r__1 = y - yps0, fabs(r__1)) > 1e-8f) {
928 for (i2 = 1; i2 <= 3; i2 += 2) {
929 i__1 = lauf[(i2 + 1) * 5 - 5];
930 for (i1 = lauf[i2 * 5 - 5]; i1 <= i__1; ++i1) {
952 if (x2 * .0062f + y2 * .01417f > 1.f) {
953 if (x2 * 6.2e-5f + y2 * 1.98373e-4f > 1.f) {
959 if (x2 * .041649f + y2 * .111111111f > 1.f) {
961 }
else if (y >= fabs(x) * .19487f - .1753846f) {
1040 assert( nf==f_mono.
nelem() );
1052 Numeric fac = 1.0 / sigma * sqrt_invPI;
1057 static float yps0 = -1.f;
1058 static float yps1 = -1.f;
1059 static float yps2 = -1.f;
1060 static float yps3 = -1.f;
1061 static float yps4 = -1.f;
1068 static long bmin, lauf[20] , bmax, imin, imax;
1069 static long stack[80] ;
1070 static Numeric a0, a1, a2, a3, a4, a5, a6, a7, a8, b8, c8, d8, e8, f8, g8,
1071 h8, b7, c7, d7, e7, f7, g7, o8, p8, q8, r8, s8, t8, h7, o7, p7,
1072 q7, r7, s7, t7, b6, c6, d6, e6, b5, c5, d5, e5, b4, c4, d4, b3,
1076 static long stackp, imitte;
1085 for (i1=0; i1< (int) nf; i1++)
1087 x[(
Index)i1] = (f_mono[(
Index)i1] - f0) / sigma;
1099 if (y >= 71.f || x[0] >= 123.f || x[nf-1] <= -123.f) {
1106 for (i2 = 1; i2 <= 4; ++i2) {
1107 for (i1 = 0; i1 <= 4; ++i1) {
1108 lauf[i1 + i2 * 5 - 5] = i2 % 2 * (nf + 1);
1113 stack[stackp - 1] = 1;
1114 stack[stackp + 19] = nf;
1115 stack[stackp + 39] =
bfun4_(y, x[0]);
1116 stack[stackp + 59] =
bfun4_(y, x[nf-1]);
1118 imin = stack[stackp - 1];
1119 imax = stack[stackp + 19];
1120 bmin = stack[stackp + 39];
1121 bmax = stack[stackp + 59];
1123 if (x[(
Index)imax-1] < 0.f) {
1125 i__1 = imin, i__2 = lauf[bmin];
1126 lauf[bmin] =
min(i__1,i__2);
1128 i__1 = imax, i__2 = lauf[bmax + 5];
1129 lauf[bmax + 5] =
max(i__1,i__2);
1132 }
else if (x[(
Index)imin-1] >= 0.f) {
1134 i__1 = imin, i__2 = lauf[bmin + 10];
1135 lauf[bmin + 10] =
min(i__1,i__2);
1137 i__1 = imax, i__2 = lauf[bmax + 15];
1138 lauf[bmax + 15] =
max(i__1,i__2);
1143 imitte = (imax + imin) / 2;
1144 stack[stackp - 1] = imitte + 1;
1145 stack[stackp + 19] = imax;
1147 stack[stackp + 59] = bmax;
1149 stack[stackp - 1] = imin;
1150 stack[stackp + 19] = imitte;
1151 stack[stackp + 39] = bmin;
1152 stack[stackp + 59] =
bfun4_(y, x[(
Index)imitte-1]);
1159 if (lauf[9] >= lauf[4] || lauf[19] >= lauf[14]) {
1160 if ((r__1 = (
float)y - yps4, fabs(r__1)) > 1e-8f) {
1162 a7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1163 y2 * (y2 * (y2 * (2.35944f - y2 * .56419f) - 72.9359f) +
1164 571.687f) - 5860.68f) + 40649.2f) - 320772.f) + 1684100.f)
1165 - 9694630.f) + 40816800.f) - 1.53575e8f) + 4.56662e8f) -
1166 9.86604e8f) + 1.16028e9f);
1167 b7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1168 y2 * (y2 * (23.0312f - y2 * 7.33447f) - 234.143f) -
1169 2269.19f) + 45251.3f) - 234417.f) + 3599150.f) -
1170 7723590.f) + 86482900.f) - 2.91876e8f) + 8.06985e8f) -
1171 9.85386e8f) - 5.60505e8f);
1172 c7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1173 y2 * (97.6203f - y2 * 44.0068f) + 1097.77f) - 25338.3f) +
1174 98079.1f) + 576054.f) - 2.3818e7f) + 22930200.f) -
1175 2.04467e8f) + 2.94262e8f) + 2.47157e8f) - 6.51523e8f);
1176 d7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1177 228.563f - y2 * 161.358f) + 8381.97f) - 66431.2f) -
1178 303569.f) + 2240400.f) + 38311200.f) - 41501300.f) -
1179 99622400.f) + 2.70167e8f) - 2.63894e8f);
1180 e7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1181 296.38f - y2 * 403.396f) + 23507.6f) - 66212.1f) -
1182 1.003e6f) + 468142.f) + 24620100.f) + 5569650.f) +
1183 1.40677e8f) - 63177100.f);
1184 f7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (125.591f -
1185 y2 * 726.113f) + 37544.8f) + 8820.94f) - 934717.f) -
1186 1931140.f) - 33289600.f) + 4073820.f) - 16984600.f);
1187 g7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (-260.198f - y2 *
1188 968.15f) + 37371.9f) + 79902.5f) - 186682.f) - 900010.f)
1189 + 7528830.f) - 1231650.f);
1190 h7 = y * (y2 * (y2 * (y2 * (y2 * (y2 * (-571.645f - y2 * 968.15f)
1191 + 23137.1f) + 72520.9f) + 153468.f) + 86407.6f) -
1193 o7 = y * (y2 * (y2 * (y2 * (y2 * (-575.164f - y2 * 726.113f) +
1194 8073.15f) + 26538.5f) + 49883.8f) - 23586.5f);
1195 p7 = y * (y2 * (y2 * (y2 * (-352.467f - y2 * 403.396f) +
1196 953.655f) + 2198.86f) - 8009.1f);
1197 q7 = y * (y2 * (y2 * (-134.792f - y2 * 161.358f) - 271.202f) -
1199 r7 = y * (y2 * (-29.7896f - y2 * 44.0068f) - 77.0535f);
1200 s7 = y * (-2.92264f - y2 * 7.33447f);
1202 a8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1203 y2 * (y2 * (y2 * (y2 - 3.68288f) + 126.532f) - 955.194f)
1204 + 9504.65f) - 70946.1f) + 483737.f) - 2857210.f) +
1205 14464700.f) - 61114800.f) + 2.11107e8f) - 5.79099e8f) +
1206 1.17022e9f) - 1.5599e9f) + 1.02827e9f;
1207 b8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1208 y2 * (y2 * (y2 * 14.f - 40.5117f) + 533.254f) + 3058.26f)
1209 - 55600.f) + 498334.f) - 2849540.f) + 13946500.f) -
1210 70135800.f) + 2.89676e8f) - 7.53828e8f) + 1.66421e9f) -
1211 2.28855e9f) + 1.5599e9f;
1212 c8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1213 y2 * (y2 * 91 - 198.876f) - 1500.17f) + 48153.3f) -
1214 217801.f) - 1063520.f) + 1.4841e7f) - 46039600.f) +
1215 63349600.f) - 6.60078e8f) + 1.06002e9f) - 1.66421e9f) +
1217 d8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (
1218 y2 * 364 - 567.164f) - 16493.7f) + 161461.f) + 280428.f)
1219 - 6890020.f) - 6876560.f) + 1.99846e8f) + 54036700.f) +
1220 6.60078e8f) - 7.53828e8f) + 5.79099e8f;
1221 e8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 *
1222 1001 - 1012.79f) - 55582.f) + 240373.f) + 1954700.f) -
1223 5257220.f) - 50101700.f) - 1.99846e8f) + 63349600.f) -
1224 2.89676e8f) + 2.11107e8f;
1225 f8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 2002 -
1226 1093.82f) - 106663.f) + 123052.f) + 3043160.f) +
1227 5257220.f) - 6876560.f) + 46039600.f) - 70135800.f) +
1229 g8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 3003 -
1230 486.14f) - 131337.f) - 123052.f) + 1954700.f) + 6890020.f)
1231 + 1.4841e7f) - 13946500.f) + 14464700.f;
1232 h8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 3432 + 486.14f) -
1233 106663.f) - 240373.f) + 280428.f) + 1063520.f) -
1234 2849540.f) + 2857210.f;
1235 o8 = y2 * (y2 * (y2 * (y2 * (y2 * (y2 * 3003 + 1093.82f) -
1236 55582.f) - 161461.f) - 217801.f) - 498334.f) + 483737.f;
1237 p8 = y2 * (y2 * (y2 * (y2 * (y2 * 2002 + 1012.79f) - 16493.7f) -
1238 48153.3f) - 55600.f) + 70946.1f;
1239 q8 = y2 * (y2 * (y2 * (y2 * 1001.f + 567.164f) - 1500.17f) -
1240 3058.26f) + 9504.65f;
1241 r8 = y2 * (y2 * (y2 * 364 + 198.876f) + 533.254f) + 955.194f;
1242 s8 = y2 * (y2 * 91.f + 40.5117f) + 126.532f;
1243 t8 = y2 * 14.f + 3.68288f;
1246 for (i2 = 1; i2 <= 3; i2 += 2) {
1247 i__1 = lauf[(i2 + 1) * 5 - 1];
1248 for (i1 = lauf[i2 * 5 - 1]; i1 <= i__1; ++i1) {
1250 ls[(
Index)i1-1] = fac * (exp(y2 - x2) * cos(x[(
Index)i1-1] * ym2) - (a7 + x2 *
1251 (b7 + x2 * (c7 + x2 * (d7 + x2 * (e7 + x2 * (f7 + x2
1252 * (g7 + x2 * (h7 + x2 * (o7 + x2 * (p7 + x2 * (q7 +
1253 x2 * (r7 + x2 * (s7 + x2 * t7))))))))))))) / (a8 + x2
1254 * (b8 + x2 * (c8 + x2 * (d8 + x2 * (e8 + x2 * (f8 +
1255 x2 * (g8 + x2 * (h8 + x2 * (o8 + x2 * (p8 + x2 * (q8
1256 + x2 * (r8 + x2 * (s8 + x2 * (t8 + x2)))))))))))))));
1263 if (lauf[8] >= lauf[3] || lauf[18] >= lauf[13]) {
1264 if ((r__1 = (
float)y - yps3, fabs(r__1)) > 1e-8f) {
1266 a5 = y * (y * (y * (y * (y * (y * (y * (y * (y *
1267 .564224f + 7.55895f) + 49.5213f) + 204.501f) + 581.746f)
1268 + 1174.8f) + 1678.33f) + 1629.76f) + 973.778f) + 272.102f;
1269 b5 = y * (y * (y * (y * (y * (y * (y * 2.25689f + 22.6778f)
1270 + 100.705f) + 247.198f) + 336.364f) + 220.843f) -
1271 2.34403f) - 60.5644f;
1272 c5 = y * (y * (y * (y * (y * 3.38534f + 22.6798f) + 52.8454f)
1273 + 42.5683f) + 18.546f) + 4.58029f;
1274 d5 = y * (y * (y * 2.25689f + 7.56186f) + 1.66203f) - .128922f;
1275 e5 = y * .564224f + 9.71457e-4f;
1276 a6 = y * (y * (y * (y * (y * (y * (y * (y * (y * (y +
1277 13.3988f) + 88.2674f) + 369.199f) + 1074.41f) + 2256.98f)
1278 + 3447.63f) + 3764.97f) + 2802.87f) + 1280.83f) +
1280 b6 = y * (y * (y * (y * (y * (y * (y * (y * 5.f +
1281 53.5952f) + 266.299f) + 793.427f) + 1549.68f) + 2037.31f)
1282 + 1758.34f) + 902.306f) + 211.678f;
1283 c6 = y * (y * (y * (y * (y * (y * 10.f + 80.3928f) +
1284 269.292f) + 479.258f) + 497.302f) + 308.186f) + 78.866f;
1285 d6 = y * (y * (y * (y * 10.f + 53.5952f) + 92.7568f) +
1286 55.0293f) + 22.0353f;
1287 e6 = y * (y * 5.f + 13.3988f) + 1.49645f;
1289 for (i2 = 1; i2 <= 3; i2 += 2) {
1290 i__1 = lauf[(i2 + 1) * 5 - 2];
1291 for (i1 = lauf[i2 * 5 - 2]; i1 <= i__1; ++i1) {
1293 ls[(
Index)i1-1] = fac * (a5 + x2 * (b5 + x2 * (c5 + x2 * (d5 + x2 *
1294 e5)))) / (a6 + x2 * (b6 + x2 * (c6 + x2 * (d6 + x2 * (
1302 if (lauf[7] >= lauf[2] || lauf[17] >= lauf[12]) {
1303 if ((r__1 = (
float)y - yps2, fabs(r__1)) > 1e-8f) {
1305 a3 = y * (y2 * (y2 * (y2 * .56419f + 3.10304f) + 4.65456f) +
1307 b3 = y * (y2 * (y2 * 1.69257f + .56419f) + 2.962f);
1308 c3 = y * (y2 * 1.69257f - 2.53885f);
1310 a4 = y2 * (y2 * (y2 * (y2 + 6.f) + 10.5f) + 4.5f) + .5625f;
1311 b4 = y2 * (y2 * (y2 * 4.f + 6.f) + 9.f) - 4.5f;
1312 c4 = y2 * (y2 * 6.f - 6.f) + 10.5f;
1313 d4 = y2 * 4.f - 6.f;
1315 for (i2 = 1; i2 <= 3; i2 += 2) {
1316 i__1 = lauf[(i2 + 1) * 5 - 3];
1317 for (i1 = lauf[i2 * 5 - 3]; i1 <= i__1; ++i1) {
1319 ls[(
Index)i1-1] = fac * (a3 + x2 * (b3 + x2 * (c3 + x2 * d3))) / (a4
1320 + x2 * (b4 + x2 * (c4 + x2 * (d4 + x2))));
1327 if (lauf[6] >= lauf[1] || lauf[16] >= lauf[11]) {
1328 if ((r__1 = (
float)y - yps1, fabs(r__1)) > 1e-8f) {
1336 for (i2 = 1; i2 <= 3; i2 += 2) {
1337 i__1 = lauf[(i2 + 1) * 5 - 4];
1338 for (i1 = lauf[i2 * 5 - 4]; i1 <= i__1; ++i1) {
1341 ls[(
Index)i1-1] = c1 * (b1 + x2) / (b2 * b2 + a2 * x2);
1349 if (lauf[5] >= lauf[0] || lauf[15] >= lauf[10]) {
1350 if ((r__1 = (
float)y - yps0, fabs(r__1)) > 1e-8f) {
1356 for (i2 = 1; i2 <= 3; i2 += 2) {
1357 i__1 = lauf[(i2 + 1) * 5 - 5];
1358 for (i1 = lauf[i2 * 5 - 5]; i1 <= i__1; ++i1) {
1426 assert( nf==f_mono.
nelem() );
1438 Numeric fac = 1.0 / sigma * sqrt_invPI;
1440 static Numeric B[22+1] = {0.,0.,.7093602e-7};
1442 const Numeric XN[15+1] = {0.,10.,9.,8.,8.,7.,6.,5.,4.,3.,3.,3.,3.,3.,3.,3.};
1443 const Numeric YN[15+1] = {0.,.6,.6,.6,.5,.4,.4,.3,.3,.3,.3,1.,.9,.8,.7,.7};
1444 static Numeric D0[25+1], D1[25+1], D2[25+1], D3[25+1], D4[25+1];
1447 const Numeric XX[3+1] = {0.,.5246476,1.65068,.7071068};
1448 const Numeric HH[3+1] = {0.,.2562121,.2588268e-1,.2820948};
1449 const Numeric NBY2[19+1] = {0.,9.5,9.,8.5,8.,7.5,7.,6.5
1450 ,6.,5.5,5.,4.5,4.,3.5,3.,2.5,2.,1.5,1.,.5};
1451 const Numeric C[21+1] = {0.,.7093602e-7,-.2518434e-6,.856687e-6,
1452 -.2787638e-5,.866074e-5,-.2565551e-4,.7228775e-4,
1453 -.1933631e-3,.4899520e-3,-.1173267e-2,.2648762e-2,
1454 -.5623190e-2,.1119601e-1,-.2084976e-1,.3621573e-1,
1455 -.5851412e-1,.8770816e-1,-.121664,.15584,-.184,.2};
1458 int I, J, K, MAX, MIN, N, i1;
1469 for (i1=0; i1< (int) nf; i1++)
1471 x[i1] = fabs( (f_mono[i1] - f0) )/ sigma;
1478 for (I=1; I<=15; I++)
1480 for (I=1; I<=25; I++)
1483 CO = 4.*HN[I]*HN[I]/25.-2.;
1484 for (J=2; J<=21; J++)
1485 B[J+1] = CO*B[J]-B[J-1]+C[J];
1486 D0[I] = HN[I]*(B[22]-B[21])/5.;
1487 D1[I] = 1.-2.*HN[I]*D0[I];
1488 D2[I] = (HN[I]*D1[I]+D0[I])/RI[2];
1489 D3[I] = (HN[I]*D2[I]+D1[I])/RI[3];
1490 D4[I] = (HN[I]*D3[I]+D2[I])/RI[4];
1492 L104:
for (K=0; K<(int) nf; K++)
1494 if ((x[K]-5.) < 0.)
goto L105;
else goto L112;
1495 L105:
if ((Y-1.) <= 0.)
goto L110;
else goto L106;
1496 L106:
if (x[K] > 1.85*(3.6-Y))
goto L112;
1498 if (Y < 1.45)
goto L107;
1501 L107: I = (int) (11.*Y);
1502 L108: J = (int) (x[K]+x[K]+1.85);
1503 MAX = (int) (XN[J]*YN[I]+.46);
1504 MIN = (int) ( (16 < 21-2*MAX) ? 16 : 21-2*MAX );
1508 for (J=MIN; J <= 19; J++)
1510 U = NBY2[J]/(UU*UU+VV*VV);
1514 ls[K] = UU/(UU*UU+VV*VV)/1.772454*fac;
1517 if (x[K]+Y >= 5.)
goto L113;
1521 U = (((D4[N+1]*DX+D3[N+1])*DX+D2[N+1])*DX+D1[N+1])*DX+D0[N+1];
1524 VV = exp(Y2-x[K]*x[K])*cos(2.*x[K]*Y)/1.128379-Y*V;
1526 MAX = (int) (5.+(12.5-x[K])*.8*Y);
1527 for (I=2; I<=MAX; I+=2)
1529 U = (x[K]*V+U)/RI[I];
1530 V = (x[K]*U+V)/RI[I+1];
1534 ls[K] = 1.128379*VV*fac;
1537 if (Y < 11.-.6875*x[K])
goto L113;
1541 ls[K] = Y*(HH[3]/(Y2+U*U)+HH[3]/(Y2+V*V))*fac;
1544 L113: U = x[K]-XX[1];
1548 ls[K] = Y*(HH[1]/(Y2+U*U)+HH[1]/(Y2+V*V)+HH[2]/(Y2+UU*UU)+HH[2]/(Y2+
1591 assert( nf==f_mono.
nelem() );
1619 gamma *= ( 1.0 - x[4] ) / ( 1 - x[3] );
1627 overlap = (x[7] + x[8] * ( x[0] - 1.0)) *
1632 gamma_o2 = gamma + 1.1 * x[5] * x[2] * x[4] * x[0];
1633 gamma_o2_2 = gamma_o2 * gamma_o2;
1638 if ( (gamma_o2/sigma - 40) <= 0.0 )
1654 FD = f_mono[J] - f0;
1655 FS = f_mono[J] + f0;
1656 SF1 = (gamma_o2 + FD*overlap) / (FD*FD + gamma_o2_2);
1657 SF2 = (gamma_o2 - FS*overlap) / (FS*FS + gamma_o2_2);
1658 ls[J] = (SF1 + SF2) /
PI;
1699 assert( nf==f_mono.
nelem() );
1727 gamma *= ( 1.0 - x[4] ) / ( 1 - x[3] );
1734 overlap = (x[7] + x[8] * ( x[0] - 1.0)) *
1739 gamma_o2 = gamma + 1.1 * x[5] * x[2] * x[4] * x[0];
1740 gamma_o2_2 = gamma_o2 * gamma_o2;
1745 if ( (gamma_o2/sigma - 40) <= 0.0 )
1766 ls[J] *= f0_2 / (f_mono[J] * f_mono[J]);
1774 FD = f_mono[J] - f0;
1775 FS = f_mono[J] + f0;
1776 SF1 = (gamma_o2 + FD*overlap) / (FD*FD + gamma_o2_2);
1777 SF2 = (gamma_o2 - FS*overlap) / (FS*FS + gamma_o2_2);
1778 ls[J] = (SF1 + SF2) /
PI;
1807 const Numeric df_cm_abs = fabs( df_cm );
1812 if( df_cm_abs <= 5 )
1814 else if( df_cm_abs <= 22 )
1815 { chi += n2 * 1.968 * exp( -0.1354 * df_cm_abs ); }
1816 else if( df_cm_abs <= 50 )
1817 { chi += n2 * 0.160 * exp( -0.0214 * df_cm_abs ); }
1819 { chi += n2 * 0.162 * exp( -0.0216 * df_cm_abs ); }
1822 if( df_cm_abs <= 5 )
1824 else if( df_cm_abs <= 22 )
1825 { chi += o2 * 1.968 * exp( -0.1354 * df_cm_abs ); }
1826 else if( df_cm_abs <= 50 )
1827 { chi += o2 * 0.160 * exp( -0.0214 * df_cm_abs ); }
1829 { chi += o2 * 0.162 * exp( -0.0216 * df_cm_abs ); }
1855 assert( f_mono.
nelem() == nf );
1861 const Numeric gamma2 = gamma * gamma;
1864 for (
Index i=0; i<nf; ++i )
1867 const Numeric df = f_mono[i] - f0;
1874 ls[i] = chi * fac / ( df * df + gamma2 );
1903 for (
Index i=0; i<nf; ++i )
1906 const Numeric df = f_mono[i] - f0;
1945 assert( nf==f_mono.
nelem() );
1947 for (
Index i=0; i<nf; ++i )
1973 assert( nf==f_mono.
nelem() );
1975 for (
Index i=0; i<nf; ++i )
1977 fac[i] = f_mono[i] / f0;
2000 assert( nf==f_mono.
nelem() );
2005 for (
Index i=0; i<nf; ++i )
2007 fac[i] = (f_mono[i] * f_mono[i]) / f0_2;
2039 assert( nf==f_mono.
nelem() );
2047 for (
Index i=0; i<nf; ++i )
2049 fac[i] = f_mono[i] * tanh(
PLANCK_CONST * f_mono[i] / kT ) /
2072 "This lineshape does nothing. It only exists, because formally\n"
2073 "you have to specify a lineshape also for continuum tags.",
2079 "The Lorentz line shape.",
2085 "The Doppler line shape.",
2091 "The Voigt line shape. Approximation by Kuntz: Accuracy 2*10-6",
2097 "The Voigt line shape. Approximation by Kuntz: Accuracy 2*10-3",
2103 "The Voigt line shape. Approximation by Kuntz: Accuracy 2*10-4",
2109 "The Voigt line shape. Approximation by Drayson.",
2114 (
"Rosenkranz_Voigt_Kuntz6",
2115 "Rosenkranz lineshape for oxygen with overlap correction, "
2116 "at high altitudes Voigt_Kuntz6.",
2121 (
"Rosenkranz_Voigt_Drayson",
2122 "Rosenkranz lineshape for oxygen with overlap correction, "
2123 "at high altitudes Drayson.",
2129 "Special line shape for CO2 in the infrared, neglecting Doppler\n"
2130 "broadening and details of line mixing. The line shape can be\n"
2132 " chi(f,f0) * Lorentz(f,f0) \n"
2134 "The chi-factor follows Cousin et al. 1985. Broadening by N2 and O2\n"
2135 "is considered, while self-broadening (CO2-CO2) is neglected."
2137 "NOTE: Temperature dependency is not yet included. The chi factor is\n"
2144 "Special line shape for CO2 in the infrared, neglecting details of\n"
2145 "line mixing. The line shape can be expressed as\n"
2146 " chi(f,f0) * Drayson(f,f0) \n"
2148 "The chi-factor follows Cousin et al. 1985. Broadening by N2 and O2\n"
2149 "is considered, while self-broadening (CO2-CO2) is neglected.\n"
2151 "NOTE: Temperature dependency is not yet included. The chi factor is\n"
2169 "No normalization of the lineshape.",
2175 "Linear normalization of the lineshape with f/f0.",
2181 "Quadratic normalization of the lineshape with (f/f0)^2.",
2187 "Van Vleck Huber normalization of the lineshape with\n"
2188 " (f*tanh(h*f/(2*k*T))) / (f0*tanh(h*f0/(2*k*T))).\n"
2189 " The denominator is a result of catalogue intensities.",