|
316 | 316 | "cell_type": "markdown", |
317 | 317 | "metadata": {}, |
318 | 318 | "source": [ |
319 | | - "The 'normal' {func}`.relativistic_breit_wigner` looks as follows:" |
| 319 | + "The {class}`.SimpleBreitWigner` looks as follows:" |
320 | 320 | ] |
321 | 321 | }, |
322 | 322 | { |
|
325 | 325 | "metadata": {}, |
326 | 326 | "outputs": [], |
327 | 327 | "source": [ |
328 | | - "from ampform.dynamics import relativistic_breit_wigner\n", |
| 328 | + "from ampform.dynamics import SimpleBreitWigner\n", |
329 | 329 | "\n", |
330 | 330 | "m, m0, w0 = sp.symbols(\"m, m0, Gamma0\", nonnegative=True)\n", |
331 | | - "rel_bw = relativistic_breit_wigner(s=m**2, mass0=m0, gamma0=w0)\n", |
332 | | - "rel_bw" |
| 331 | + "bw = SimpleBreitWigner(m**2, m0, w0)\n", |
| 332 | + "Math(aslatex({bw: bw.doit(deep=False)}))" |
333 | 333 | ] |
334 | 334 | }, |
335 | 335 | { |
|
343 | 343 | "cell_type": "markdown", |
344 | 344 | "metadata": {}, |
345 | 345 | "source": [ |
346 | | - "The relativistic Breit–Wigner can be adapted slightly, so that its amplitude goes to zero at threshold ($m_0 = m1 + m2$) and that it becomes normalizable. This is done with {ref}`form factors <dynamics:Form factor>` and can be obtained with the function {func}`.relativistic_breit_wigner_with_ff`:" |
| 346 | + "The relativistic Breit–Wigner can be adapted slightly, so that its amplitude goes to zero at threshold, $s = \\left(m_1 + m_2\\right)^2$, and that it becomes normalizable. This is done with {ref}`form factors <dynamics:Form factor>` and can be obtained with the function {func}`.relativistic_breit_wigner_with_ff`:" |
347 | 347 | ] |
348 | 348 | }, |
349 | 349 | { |
|
354 | 354 | "source": [ |
355 | 355 | "from ampform.dynamics import PhaseSpaceFactorSWave, relativistic_breit_wigner_with_ff\n", |
356 | 356 | "\n", |
357 | | - "rel_bw_with_ff = relativistic_breit_wigner_with_ff(\n", |
| 357 | + "bw_with_ff = relativistic_breit_wigner_with_ff(\n", |
358 | 358 | " s=s,\n", |
359 | 359 | " mass0=m0,\n", |
360 | 360 | " gamma0=w0,\n", |
|
364 | 364 | " meson_radius=1,\n", |
365 | 365 | " phsp_factor=PhaseSpaceFactorSWave,\n", |
366 | 366 | ")\n", |
367 | | - "rel_bw_with_ff" |
| 367 | + "bw_with_ff" |
368 | 368 | ] |
369 | 369 | }, |
370 | 370 | { |
|
380 | 380 | "metadata": { |
381 | 381 | "jupyter": { |
382 | 382 | "source_hidden": true |
383 | | - } |
| 383 | + }, |
| 384 | + "mystnb": { |
| 385 | + "code_prompt_show": "Show the running-width definition" |
| 386 | + }, |
| 387 | + "tags": [ |
| 388 | + "hide-input" |
| 389 | + ] |
384 | 390 | }, |
385 | 391 | "outputs": [], |
386 | 392 | "source": [ |
387 | 393 | "from ampform.dynamics import EnergyDependentWidth\n", |
388 | 394 | "\n", |
389 | | - "L = sp.Symbol(\"L\", integer=True)\n", |
390 | 395 | "width = EnergyDependentWidth(\n", |
391 | 396 | " s=s,\n", |
392 | 397 | " mass0=m0,\n", |
|
396 | 401 | " angular_momentum=L,\n", |
397 | 402 | " meson_radius=1,\n", |
398 | 403 | " phsp_factor=PhaseSpaceFactorSWave,\n", |
399 | | - ")\n", |
400 | | - "Math(aslatex({width: width.evaluate()}))" |
| 404 | + ")" |
| 405 | + ] |
| 406 | + }, |
| 407 | + { |
| 408 | + "cell_type": "code", |
| 409 | + "execution_count": null, |
| 410 | + "metadata": { |
| 411 | + "jupyter": { |
| 412 | + "source_hidden": true |
| 413 | + }, |
| 414 | + "tags": [ |
| 415 | + "hide-input" |
| 416 | + ] |
| 417 | + }, |
| 418 | + "outputs": [], |
| 419 | + "source": [ |
| 420 | + "from ampform.dynamics import BreitWigner\n", |
| 421 | + "\n", |
| 422 | + "exprs = [\n", |
| 423 | + " BreitWigner(s, m0, w0, m1, m2, angular_momentum=L, meson_radius=d),\n", |
| 424 | + " width,\n", |
| 425 | + "]\n", |
| 426 | + "Math(aslatex({e: e.doit(deep=False) for e in exprs}))" |
401 | 427 | ] |
402 | 428 | }, |
403 | 429 | { |
|
407 | 433 | "It is possible to choose different formulations for the phase space factor $\\rho$, see {doc}`analyticity/phasespace-factors`." |
408 | 434 | ] |
409 | 435 | }, |
| 436 | + { |
| 437 | + "cell_type": "markdown", |
| 438 | + "metadata": {}, |
| 439 | + "source": [ |
| 440 | + "### Multi-channel Breit–Wigner" |
| 441 | + ] |
| 442 | + }, |
| 443 | + { |
| 444 | + "cell_type": "code", |
| 445 | + "execution_count": null, |
| 446 | + "metadata": {}, |
| 447 | + "outputs": [], |
| 448 | + "source": [ |
| 449 | + "from ampform.dynamics import ChannelArguments, MultichannelBreitWigner\n", |
| 450 | + "\n", |
| 451 | + "channels = tuple(\n", |
| 452 | + " ChannelArguments(\n", |
| 453 | + " s=s,\n", |
| 454 | + " mass=m0,\n", |
| 455 | + " coupling_squared=sp.Symbol(f\"g{i}^2\", nonnegative=True),\n", |
| 456 | + " m1=sp.Symbol(f\"m_{{a,{i}}}\"),\n", |
| 457 | + " m2=sp.Symbol(f\"m_{{b,{i}}}\"),\n", |
| 458 | + " angular_momentum=sp.Symbol(f\"L{i}\"),\n", |
| 459 | + " meson_radius=d,\n", |
| 460 | + " )\n", |
| 461 | + " for i in [1, 2]\n", |
| 462 | + ")\n", |
| 463 | + "multi_bw = MultichannelBreitWigner(s, m0, channels)" |
| 464 | + ] |
| 465 | + }, |
| 466 | + { |
| 467 | + "cell_type": "code", |
| 468 | + "execution_count": null, |
| 469 | + "metadata": { |
| 470 | + "jupyter": { |
| 471 | + "source_hidden": true |
| 472 | + }, |
| 473 | + "tags": [ |
| 474 | + "hide-input" |
| 475 | + ] |
| 476 | + }, |
| 477 | + "outputs": [], |
| 478 | + "source": [ |
| 479 | + "exprs = [\n", |
| 480 | + " multi_bw,\n", |
| 481 | + " *channels,\n", |
| 482 | + "]\n", |
| 483 | + "Math(aslatex({e: e.doit(deep=False) for e in exprs}))" |
| 484 | + ] |
| 485 | + }, |
| 486 | + { |
| 487 | + "cell_type": "markdown", |
| 488 | + "metadata": {}, |
| 489 | + "source": [ |
| 490 | + "The serialized $g_i^2$ values are coupling constants, not partial widths. Unlike {class}`.EnergyDependentWidth`, the channel terms are therefore not normalized at the pole position. For $L=0$, the expression has the familiar Flatté form:" |
| 491 | + ] |
| 492 | + }, |
| 493 | + { |
| 494 | + "cell_type": "code", |
| 495 | + "execution_count": null, |
| 496 | + "metadata": { |
| 497 | + "jupyter": { |
| 498 | + "source_hidden": true |
| 499 | + }, |
| 500 | + "tags": [ |
| 501 | + "full-width", |
| 502 | + "hide-input" |
| 503 | + ] |
| 504 | + }, |
| 505 | + "outputs": [], |
| 506 | + "source": [ |
| 507 | + "channels = tuple(\n", |
| 508 | + " ChannelArguments(\n", |
| 509 | + " s, m0, sp.Symbol(f\"g{i}^2\"), sp.Symbol(f\"m_a{i}\"), sp.Symbol(f\"m_b{i}\")\n", |
| 510 | + " )\n", |
| 511 | + " for i in [1, 2]\n", |
| 512 | + ")\n", |
| 513 | + "expr = MultichannelBreitWigner(s, m0, channels)\n", |
| 514 | + "Math(aslatex({expr: expr.doit().simplify()}))" |
| 515 | + ] |
| 516 | + }, |
410 | 517 | { |
411 | 518 | "cell_type": "markdown", |
412 | 519 | "metadata": {}, |
|
418 | 525 | "cell_type": "markdown", |
419 | 526 | "metadata": {}, |
420 | 527 | "source": [ |
421 | | - "The following shows the effect of {doc}`analyticity/phasespace-factors` a on relativistic Breit–Wigner:" |
| 528 | + "The following shows the effect of {doc}`analyticity/phasespace-factors` on a relativistic Breit–Wigner:" |
422 | 529 | ] |
423 | 530 | }, |
424 | 531 | { |
|
465 | 572 | "args = (m, w0, m0, m1, m2, L, d)\n", |
466 | 573 | "np_rel_bw_with_ff = sp.lambdify(args, rel_bw_with_ff.doit())\n", |
467 | 574 | "np_rel_bw_with_ff_ac = sp.lambdify(args, expr=rel_bw_with_ff_ac.doit())\n", |
468 | | - "np_rel_bw = sp.lambdify(args, expr=rel_bw.doit())\n", |
| 575 | + "np_rel_bw = sp.lambdify(args, expr=bw.doit())\n", |
469 | 576 | "\n", |
470 | 577 | "# Create UI\n", |
471 | 578 | "x = np.linspace(0, 4, num=500)\n", |
|
0 commit comments