Eduardo Rodrigues, Henry Schreiner
University of Cincinnati , Princeton University
Particles and decays
in the Scikit-HEP project
IRIS-HEP AS workshop, 19th June 2019
PDG particle data
and identification codes
Parse decay files, describe
and convert particle decays
between digital
representations
IRIS-HEP AS Workshop, 19th June 2019 2/22Henry Schreiner and Eduardo Rodrigues
The grand picture – the Scikit-HEP project
InteroperabilityReproducibility
Collaboration
 Create an ecosystem for particle physics data analysis in Python
 Initiative to improve the interoperability between HEP tools
and the scientific ecosystem in Python
- Expand the typical toolkitset for particle physicists
- Set common APIs and definitions to ease “cross-talk”
 Initiative to build a community of developers and users
- Community-driven and community-oriented project
 Effort to improve discoverability of relevant tools
Sustainability
IRIS-HEP AS Workshop, 19th June 2019 3/22Henry Schreiner and Eduardo Rodrigues
Who uses (some of) Scikit-HEP ?
PDG particle data
and identification codes
IRIS-HEP AS Workshop, 19th June 2019 5/22Henry Schreiner and Eduardo Rodrigues
Particle package – motivation
 The Particle Data Group (PDG) provides a downloadable table of particle masses, widths, charges
and Monte Carlo particle ID numbers (PDG IDs)
- Most recent file here
 It also provided an experimental file with extended information (spin, quark content, P and C parities, etc.)
until 2008 only, see here (not widely known!)
 But anyone wanting to use these data, the only readily available, has to parse the file programmatically
 Why not make a Python package to deal with all these data, for everyone?
 The C++ HepPID and HepPDT libraries provide functions for processing particle ID codes
in the standard particle (aka PDG) numbering scheme
 Different event generators have their separate set of particle IDs: Pythia, EvtGen, etc.
 Again, why not make a package providing all functionality/conversions, Python-ically, for everyone?
IRIS-HEP AS Workshop, 19th June 2019 6/22Henry Schreiner and Eduardo Rodrigues
Particle package – overview
 Pythonic interface to
PDG particle data table
and
particle identification codes
 With extra goodies
 2 separate submodules
 Comprehensive documentation (docstrings)
 Continuous Integration (CI): extensive tests for excellent test coverage
- In packages such as these, tests should target both the code itself but also the physics it deals with!
 We use Azure DevOps
- Seamlessly test on Linux, macOS and Windows
IRIS-HEP AS Workshop, 19th June 2019 7/22Henry Schreiner and Eduardo Rodrigues
Particle package – PDG IDs module overview
 Process and query PDG IDs, and more – no look-up table needed
- Current version of package reflects the latest version of the HepPID & HepPDT utility functions defined in
the C++ HepPID and HepPDT versions 3.04.01
- It contains more functionality than that available in the C++ code … and minor fixes too
 Definition of a PDGID class, PDG ID literals,
and set of standalone HepPID functions to query PDG IDs
(is_meson, has_bottom, j_spin, charge, etc.)
- All PDGID class functions are available standalone
 PDG ID queries also available on the command line
 PDGID class
- Wrapper class for PDG IDs
- Behaves like an int, with extra goodies
- Large spectrum of properties and methods,
i.e. the functions defined in the HepPID and HepPDT
C++ libraries, with a Pythonic interface, and yet more
- To print them all:
IRIS-HEP AS Workshop, 19th June 2019 8/22Henry Schreiner and Eduardo Rodrigues
Particle package – particle module overview
 Simple and natural API to deal with the PDG particle data table, with powerful look-up and search utilities
 Definition of a Particle class and particle name literals
- Typical queries should be, and are, 1-liners
 Advanced usage: ability to specify or build a particle data table, conversion tools
 Particle / PDG ID searches available on the command line too
IRIS-HEP AS Workshop, 19th June 2019 9/22Henry Schreiner and Eduardo Rodrigues
Particle package – data files
 All data files stored under particle/data/
 PDG particle data files
- Original PDG data files, which are in a fixed-width format
- Code uses “digested forms” of the PDG files, stored as CSV, for optimised querying
- Latest PDG data used by default (2019 at present)
- Advanced usage: user can load older PDG table, load a “user table” with new particles, append to default table
 Other data files
- CSV file for mapping of PDG IDs to particle LaTeX names
…
…
IRIS-HEP AS Workshop, 19th June 2019 10/22Henry Schreiner and Eduardo Rodrigues
Particle package – particle look-up
 Particle class
- Standard look-up via from_pdgid(…)
- Various other from_X(…)
methods exist
 - Large spectrum of
properties and methods:
- Get particle properties
- Deal with underlying particle table
- Powerful search engine …
 Particle literals
- Easily recognizable names for manipulations,
e.g. in plots
IRIS-HEP AS Workshop, 19th June 2019 11/22Henry Schreiner and Eduardo Rodrigues
Particle package – powerful particle search
 Particle.find(…) – search a single match (exception raised if multiple particles match the search specifications)
 Particle.findall(…) – search a list of candidates
 Powerful search methods
that can query any particle property!
 One-line queries
 E.g., trivially find all pseudoscalar charm mesons:
IRIS-HEP AS Workshop, 19th June 2019 12/22Henry Schreiner and Eduardo Rodrigues
Particle package – future directions & developments
 Addition of particle IDs and names relevant to other MC programs
- (Yes, not consistent across programs!)
- Useful IDs such as those used in PYTHIA, Geant and EvtGen
 Bring in other communities where Particle is / can be relevant
- Ongoing discussions with astroparticle physics community
- Particle IDs used in EPOS, CORSIKA, DpmJet, QGSJet, Sybill, UrQMD, …
 Ongoing discussions with PDG group
- Provide the right tool
- Can we provide more?
- Stay tuned …
Parse decay files, describe and
convert particle decays
between digital representations
IRIS-HEP AS Workshop, 19th June 2019 14/22Henry Schreiner and Eduardo Rodrigues
DecayLanguage package – motivation and overview
Motivation
 Ability to describe decay-tree-like structures
 Provide a translation of decay amplitude models from AmpGen to GooFit
- Idea is to generalise this to other decay descriptions
 Any experiment uses event generators which, among many things, need to describe particle decay chains
 Programs such as EvtGen rely on so-called .dec decay files
 Many experiments need decay data files
 Why not make a Python package to deal with decay files, for everyone?
Overview
 Tools to parse decay files and programmatically manipulate them, query, display information
- Descriptions and parsing built atop the Lark parser
 Tools to translate decay amplitude models from AmpGen to GooFit, and manipulate them
Library and set of applications for fitting and
generating
multi-body particle decays using the isobar model
IRIS-HEP AS Workshop, 19th June 2019 15/22Henry Schreiner and Eduardo Rodrigues
DecayLanguage package – decay files
“Master file” DECAY.DEC
 Gigantic file defining decay modes for all relevant particles,
including decay model specifications
 LHCb example:
~ 450 particle decays, thousands of decay modes,
over 11k lines in total
User .dec files
 Needed to produce specific MC samples
 Typically contain a single decay chain
(except if defining inclusive samples)
Define dm 0.507e12
...
Alias B0sig B0
Alias anti-B0sig anti-B0
ChargeConj B0sig anti-B0sig
...
Decay pi0
0.988228297 gamma gamma PHSP;
0.011738247 e+ e- gamma PI0_DALITZ;
0.000033392 e+ e+ e- e- PHSP;
0.000000065 e+ e- PHSP;
Enddecay
...
CDecay tau+
...
# Decay file for [B_c+ -> (B_s0 -> K+ K-) pi+]cc
Alias B_c+sig B_c+
Alias B_c-sig B_c-
ChargeConj B_c+sig B_c-sig
Alias MyB_s0 B_s0
Alias Myanti-B_s0 anti-B_s0
ChargeConj MyB_s0 Myanti-B_s0
Decay B_c+sig
1.000 MyB_s0 pi+ PHOTOS PHSP;
Enddecay
CDecay B_c-sig
Decay MyB_s0
1.000 K+ K- SSD_CP 20.e12 0.1 1.0 0.04 9.6 -0.8 8.4 -0.6;
Enddecay
CDecay Myanti-B_s0
IRIS-HEP AS Workshop, 19th June 2019 16/22Henry Schreiner and Eduardo Rodrigues
DecayLanguage package – decay file parsing and display
 Parsing should be simple
- Expert users can configure parser choice and settings, etc.
 Parsing should be (reasonably) fast
- Example of LHCb’s master DECAY.DEC file:
Over 11k lines in total, ~ 450 particle decays, ~60 charge-conjugate decays created on-the-fly (‘CDecay’ statements),
thousands of decay modes
 After parsing, many queries are possible
 One can also visualise decay chains … 
IRIS-HEP AS Workshop, 19th June 2019 17/22Henry Schreiner and Eduardo Rodrigues
Decay chain – simplest view with no sub-decays shown
Decay D*+
0.6770 D0 pi+ VSS;
0.3070 D+ pi0 VSS;
0.0160 D+ gamma VSP_PWAVE;
Enddecay
Decay D*-
0.6770 anti-D0 pi- VSS;
0.3070 D- pi0 VSS;
0.0160 D- gamma VSP_PWAVE;
Enddecay
Decay D0
1.0 K- pi+ PHSP;
Enddecay
Decay D+
1.0 K- pi+ pi+ pi0 PHSP;
Enddecay
Decay pi0
0.988228297 gamma gamma PHSP;
0.011738247 e+ e- gamma PI0_DALITZ;
0.000033392 e+ e+ e- e- PHSP;
0.000000065 e+ e- PHSP;
Enddecay
(Considered by itself, this file in in fact incomplete,
as there are no instructions on how to decay the anti-D0 and the D-.
Good enough for illustration purposes, though.)
IRIS-HEP AS Workshop, 19th June 2019 18/22Henry Schreiner and Eduardo Rodrigues
Decay chain – p0 decays displayed
IRIS-HEP AS Workshop, 19th June 2019 19/22Henry Schreiner and Eduardo Rodrigues
Decay chain – full view
IRIS-HEP AS Workshop, 19th June 2019 20/22Henry Schreiner and Eduardo Rodrigues
DecayLanguage package – conversion of decay models / representations
 Decay chains
- A universal modelling of decay chains would profit many use cases,
e.g. description of components for amplitude analyses
 Present code understands AmpGen syntax and can generate code for the GooFit fitter
 Note:
makes use of the Particle package
IRIS-HEP AS Workshop, 19th June 2019 21/22Henry Schreiner and Eduardo Rodrigues
DecayLanguage package – future directions & developments
Decay files
 Streamline and enhance the .dec parser
- Ex.: syntax such as
p.find_decay_chains(final_state=[‘K+’, ‘K-’, ‘pi+’, ‘pi-’], extra_particles=[‘pi0’])
could be a neat/trivial way to query the master DECAY.DEC and
“find all decay chains leading to either ‘K+ K- pi+ pi-’ or ‘K+ K- pi+ pi- pi0’”
 Provide a universal description and visualisation of decay trees (a lot done on this in the last week …)
- We already have customers interested, e.g. visualisation of decays in pyhepmc
Decay models / representations
 Implement more backend formats: GooFit in Python, etc.
 Longer term – implement decay logic inside model descriptions
- Provide a reference for other packages
IRIS-HEP AS Workshop, 19th June 2019 22/22Henry Schreiner and Eduardo Rodrigues
Interested ? Want to try it ?
Particle
 GitHub: https://github.com/scikit-hep/particle/
 Releases: PyPI
 Kindly recognise software work – cite us:
DecayLanguage
 GitHub: https://github.com/scikit-hep/decaylanguage
 Releases: PyPI
Scikit-HEP project
 GitHub: https://github.com/scikit-hep/
 Website: http://scikit-hep.org/
 Get in touch: http://scikit-hep.org/get-in-touch.html
See interactive demos:
- Particle
- DecayLanguage
1/4
AmpGen is a library for tting and
generating multibody particle decays.
Takes a decay chain representation and
converts into fast, low-level code.
Fairly agnostic about the types of particles in
the initial / nal state (pseudoscalars, NEW
fermions, photons ...)
No hard limit on number of particles in the
nal state, practically, more than about six
bodies is a dicult.
Classic three-body (pseudoscalar) decays are
a two-body problem (A Dalitz plot).
Four-body decays are a ve-dimensional
problem =⇒ only unbinned ts are practical.
Speed is critical as already have O(106)
candidates in many channels, and expecting
10 → 50× these yields by 2030.
For a typical four-body amplitude, can
perform ∼ 106evaluations/s/core on consumer
laptop.
Part of the GooFit organisation on GitHub.
High Level Code
Low Level Code
Decay chain representation
Decay descriptors:
2/4
More on the user interface
User species couplings between dierent particles, either partially or as full decay chains, for
example:
D0{K*(892)bar0,rho(770)0}
Couples a D0 meson to a pair of vectors, then if you add the couplings:
K*(892)bar0{K-,pi+}
K*(892)bar0{K0S0,pi0}
K*(892)bar0{K0L0,pi0}
rho(770){pi+,pi-}
You can generate the amplitude coupling the D0 meson to the various nal states.
You can add additional orbital couplings as
D0[P]{K*(892)bar0,rho(770)0}
D0[D]{K*(892)bar0,rho(770)0}
Which will be coherently summed to give the total amplitude, mod-squared to give the
dierential rate:
P(ψ)dψ ∝
i
giAi(ψ)
2
dψ (1)
3/4
Developments this year
Big development is the inclusion of spin-half
particles in the initial/nal state.
Have to deal with additional spin-indicies in
the probability / need to incoherently sum the
dierent spin congurations.
In general, this leads to a rate equation that
looks like (for an initial state polarised as ˆρ
P (ψ, ˆρ) dψ =
ll
glgl
imm
(δmm +σmm ˆρ)Al
mi(ψ) Al
m i(ψ)
∗
(2)
A tricky thing to calculate (and normalise)
eciently!
Toy examples
Λb → Λpp with intermediate spin-3/4
contributions:
2.5 3 3.5 4 4.5
mΛp [GeV/c2
]
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
×103
Entries/(0.03GeV/c2
)
2 2.5 3 3.5 4 4.5
mpp [GeV/c2
]
0
2
4
6
8
10
12
14
16
18
20
22
24
×103
Entries/(0.03GeV/c2
)
B → pppp
10
20
30
40
50
10 15
sppp
8
10
12
14
16
18
sppp
4/4
Future developments
With some minor modications, can generate Cuda kernels that can be integrated into GooFit
Evaluate amplitude D0 → K∗
2 (1430)0 [K−π+] π0 on 8.4 million events with 1 CPU core (i7-8550U
CPU @ 1.80GHz) vs 1 GPU (GeForce GTX 1050M)
GPU version is about a factor of two faster than the OpenMP version (i.e. using 8 cores rather
than 1 for the CPU version). Further tuning of the code generator has given another factor of
2 → 3 compared to what is shown here.
1 2 3
sK−π+ GeV2
/c4
0.5
1
1.5
2
2.5
3
sK−π0GeV2
/c4
CPU ∼ 1300ms
1 2 3
sK−π+ GeV2
/c4
0.5
1
1.5
2
2.5
3
sK−π0GeV2
/c4
GPU ∼ 89ms
Additional notes
Cincinnati
• Future work in GooFit: line shapes/spinfactor system, 𝐾 𝑠 𝜋𝜋, support AmpGen baryonic
decays - may not be done in a year
• Daniel Vieira starts in October
Princeton - Henry
• ROOT Conda-Forge
• Some further work on fitting (GooFit and others)
1/1Henry Schreiner Other projects June 19, 2019
Back-up
IRIS-HEP AS Workshop, 19th June 2019 24/22Henry Schreiner and Eduardo Rodrigues
 PDGID literals
- Provide (PDGID class) aliases
for the most common particles,
with easily recognisable names
 All is consistent. Ex.:
Particle package – PDG identification code literals
 Literals: handy way to manipulate things with human-readable names
IRIS-HEP AS Workshop, 19th June 2019 25/22Henry Schreiner and Eduardo Rodrigues
DecayLanguage package – Lark parser grammar for decay files
start : _NEWLINE? (line _NEWLINE)+ (End _NEWLINE)?
?line : define | pythia_def | alias | chargeconj | commands | decay | cdecay | setlspw
pythia_def : PythiaBothParam LABEL : LABEL = (LABEL | SIGNED_NUMBER)
setlspw : SetLineshapePW label label label value
cdecay : CDecay label
define : Define label value
alias : Alias label label
chargeconj : ChargeConj label label
?commands : global_photos
global_photos : boolean_photos
boolean_photos : yesPhotos - yes
| noPhotos - no
decay : Decay particle _NEWLINE decayline+ Enddecay
decayline : value particle* photos? model _NEWLINE // There is always a ; here
value : SIGNED_NUMBER
photos : PHOTOS
label : LABEL
particle : LABEL // Add full particle parsing here
model : MODEL_NAME model_options?
model_options : (value | LABEL)+
%import common.WS_INLINE
%import common.SIGNED_NUMBER
// New lines filter our comments too, and multiple new lines
_NEWLINE: ( /r?n[t ]*/ | COMMENT )+
MODEL_NAME.2 : BaryonPCR|BTO3PI_CP|BTOSLLALI|BTOSLLBALL|BTOXSGAMMA|BTOXSLL| ...
LABEL : /[a-zA-Z0-9/-+*_()']+/
COMMENT : /[;#][^n]*/
// We should ignore comments
%ignore COMMENT
// Disregard spaces in text
%ignore WS_INLINE
 Decay file parser
grammar:
decfile.lark !
 This file is enough
to parse and
understand
decay files

2019 IRIS-HEP AS workshop: Particles and decays

  • 1.
    Eduardo Rodrigues, HenrySchreiner University of Cincinnati , Princeton University Particles and decays in the Scikit-HEP project IRIS-HEP AS workshop, 19th June 2019 PDG particle data and identification codes Parse decay files, describe and convert particle decays between digital representations
  • 2.
    IRIS-HEP AS Workshop,19th June 2019 2/22Henry Schreiner and Eduardo Rodrigues The grand picture – the Scikit-HEP project InteroperabilityReproducibility Collaboration  Create an ecosystem for particle physics data analysis in Python  Initiative to improve the interoperability between HEP tools and the scientific ecosystem in Python - Expand the typical toolkitset for particle physicists - Set common APIs and definitions to ease “cross-talk”  Initiative to build a community of developers and users - Community-driven and community-oriented project  Effort to improve discoverability of relevant tools Sustainability
  • 3.
    IRIS-HEP AS Workshop,19th June 2019 3/22Henry Schreiner and Eduardo Rodrigues Who uses (some of) Scikit-HEP ?
  • 4.
    PDG particle data andidentification codes
  • 5.
    IRIS-HEP AS Workshop,19th June 2019 5/22Henry Schreiner and Eduardo Rodrigues Particle package – motivation  The Particle Data Group (PDG) provides a downloadable table of particle masses, widths, charges and Monte Carlo particle ID numbers (PDG IDs) - Most recent file here  It also provided an experimental file with extended information (spin, quark content, P and C parities, etc.) until 2008 only, see here (not widely known!)  But anyone wanting to use these data, the only readily available, has to parse the file programmatically  Why not make a Python package to deal with all these data, for everyone?  The C++ HepPID and HepPDT libraries provide functions for processing particle ID codes in the standard particle (aka PDG) numbering scheme  Different event generators have their separate set of particle IDs: Pythia, EvtGen, etc.  Again, why not make a package providing all functionality/conversions, Python-ically, for everyone?
  • 6.
    IRIS-HEP AS Workshop,19th June 2019 6/22Henry Schreiner and Eduardo Rodrigues Particle package – overview  Pythonic interface to PDG particle data table and particle identification codes  With extra goodies  2 separate submodules  Comprehensive documentation (docstrings)  Continuous Integration (CI): extensive tests for excellent test coverage - In packages such as these, tests should target both the code itself but also the physics it deals with!  We use Azure DevOps - Seamlessly test on Linux, macOS and Windows
  • 7.
    IRIS-HEP AS Workshop,19th June 2019 7/22Henry Schreiner and Eduardo Rodrigues Particle package – PDG IDs module overview  Process and query PDG IDs, and more – no look-up table needed - Current version of package reflects the latest version of the HepPID & HepPDT utility functions defined in the C++ HepPID and HepPDT versions 3.04.01 - It contains more functionality than that available in the C++ code … and minor fixes too  Definition of a PDGID class, PDG ID literals, and set of standalone HepPID functions to query PDG IDs (is_meson, has_bottom, j_spin, charge, etc.) - All PDGID class functions are available standalone  PDG ID queries also available on the command line  PDGID class - Wrapper class for PDG IDs - Behaves like an int, with extra goodies - Large spectrum of properties and methods, i.e. the functions defined in the HepPID and HepPDT C++ libraries, with a Pythonic interface, and yet more - To print them all:
  • 8.
    IRIS-HEP AS Workshop,19th June 2019 8/22Henry Schreiner and Eduardo Rodrigues Particle package – particle module overview  Simple and natural API to deal with the PDG particle data table, with powerful look-up and search utilities  Definition of a Particle class and particle name literals - Typical queries should be, and are, 1-liners  Advanced usage: ability to specify or build a particle data table, conversion tools  Particle / PDG ID searches available on the command line too
  • 9.
    IRIS-HEP AS Workshop,19th June 2019 9/22Henry Schreiner and Eduardo Rodrigues Particle package – data files  All data files stored under particle/data/  PDG particle data files - Original PDG data files, which are in a fixed-width format - Code uses “digested forms” of the PDG files, stored as CSV, for optimised querying - Latest PDG data used by default (2019 at present) - Advanced usage: user can load older PDG table, load a “user table” with new particles, append to default table  Other data files - CSV file for mapping of PDG IDs to particle LaTeX names … …
  • 10.
    IRIS-HEP AS Workshop,19th June 2019 10/22Henry Schreiner and Eduardo Rodrigues Particle package – particle look-up  Particle class - Standard look-up via from_pdgid(…) - Various other from_X(…) methods exist  - Large spectrum of properties and methods: - Get particle properties - Deal with underlying particle table - Powerful search engine …  Particle literals - Easily recognizable names for manipulations, e.g. in plots
  • 11.
    IRIS-HEP AS Workshop,19th June 2019 11/22Henry Schreiner and Eduardo Rodrigues Particle package – powerful particle search  Particle.find(…) – search a single match (exception raised if multiple particles match the search specifications)  Particle.findall(…) – search a list of candidates  Powerful search methods that can query any particle property!  One-line queries  E.g., trivially find all pseudoscalar charm mesons:
  • 12.
    IRIS-HEP AS Workshop,19th June 2019 12/22Henry Schreiner and Eduardo Rodrigues Particle package – future directions & developments  Addition of particle IDs and names relevant to other MC programs - (Yes, not consistent across programs!) - Useful IDs such as those used in PYTHIA, Geant and EvtGen  Bring in other communities where Particle is / can be relevant - Ongoing discussions with astroparticle physics community - Particle IDs used in EPOS, CORSIKA, DpmJet, QGSJet, Sybill, UrQMD, …  Ongoing discussions with PDG group - Provide the right tool - Can we provide more? - Stay tuned …
  • 13.
    Parse decay files,describe and convert particle decays between digital representations
  • 14.
    IRIS-HEP AS Workshop,19th June 2019 14/22Henry Schreiner and Eduardo Rodrigues DecayLanguage package – motivation and overview Motivation  Ability to describe decay-tree-like structures  Provide a translation of decay amplitude models from AmpGen to GooFit - Idea is to generalise this to other decay descriptions  Any experiment uses event generators which, among many things, need to describe particle decay chains  Programs such as EvtGen rely on so-called .dec decay files  Many experiments need decay data files  Why not make a Python package to deal with decay files, for everyone? Overview  Tools to parse decay files and programmatically manipulate them, query, display information - Descriptions and parsing built atop the Lark parser  Tools to translate decay amplitude models from AmpGen to GooFit, and manipulate them Library and set of applications for fitting and generating multi-body particle decays using the isobar model
  • 15.
    IRIS-HEP AS Workshop,19th June 2019 15/22Henry Schreiner and Eduardo Rodrigues DecayLanguage package – decay files “Master file” DECAY.DEC  Gigantic file defining decay modes for all relevant particles, including decay model specifications  LHCb example: ~ 450 particle decays, thousands of decay modes, over 11k lines in total User .dec files  Needed to produce specific MC samples  Typically contain a single decay chain (except if defining inclusive samples) Define dm 0.507e12 ... Alias B0sig B0 Alias anti-B0sig anti-B0 ChargeConj B0sig anti-B0sig ... Decay pi0 0.988228297 gamma gamma PHSP; 0.011738247 e+ e- gamma PI0_DALITZ; 0.000033392 e+ e+ e- e- PHSP; 0.000000065 e+ e- PHSP; Enddecay ... CDecay tau+ ... # Decay file for [B_c+ -> (B_s0 -> K+ K-) pi+]cc Alias B_c+sig B_c+ Alias B_c-sig B_c- ChargeConj B_c+sig B_c-sig Alias MyB_s0 B_s0 Alias Myanti-B_s0 anti-B_s0 ChargeConj MyB_s0 Myanti-B_s0 Decay B_c+sig 1.000 MyB_s0 pi+ PHOTOS PHSP; Enddecay CDecay B_c-sig Decay MyB_s0 1.000 K+ K- SSD_CP 20.e12 0.1 1.0 0.04 9.6 -0.8 8.4 -0.6; Enddecay CDecay Myanti-B_s0
  • 16.
    IRIS-HEP AS Workshop,19th June 2019 16/22Henry Schreiner and Eduardo Rodrigues DecayLanguage package – decay file parsing and display  Parsing should be simple - Expert users can configure parser choice and settings, etc.  Parsing should be (reasonably) fast - Example of LHCb’s master DECAY.DEC file: Over 11k lines in total, ~ 450 particle decays, ~60 charge-conjugate decays created on-the-fly (‘CDecay’ statements), thousands of decay modes  After parsing, many queries are possible  One can also visualise decay chains … 
  • 17.
    IRIS-HEP AS Workshop,19th June 2019 17/22Henry Schreiner and Eduardo Rodrigues Decay chain – simplest view with no sub-decays shown Decay D*+ 0.6770 D0 pi+ VSS; 0.3070 D+ pi0 VSS; 0.0160 D+ gamma VSP_PWAVE; Enddecay Decay D*- 0.6770 anti-D0 pi- VSS; 0.3070 D- pi0 VSS; 0.0160 D- gamma VSP_PWAVE; Enddecay Decay D0 1.0 K- pi+ PHSP; Enddecay Decay D+ 1.0 K- pi+ pi+ pi0 PHSP; Enddecay Decay pi0 0.988228297 gamma gamma PHSP; 0.011738247 e+ e- gamma PI0_DALITZ; 0.000033392 e+ e+ e- e- PHSP; 0.000000065 e+ e- PHSP; Enddecay (Considered by itself, this file in in fact incomplete, as there are no instructions on how to decay the anti-D0 and the D-. Good enough for illustration purposes, though.)
  • 18.
    IRIS-HEP AS Workshop,19th June 2019 18/22Henry Schreiner and Eduardo Rodrigues Decay chain – p0 decays displayed
  • 19.
    IRIS-HEP AS Workshop,19th June 2019 19/22Henry Schreiner and Eduardo Rodrigues Decay chain – full view
  • 20.
    IRIS-HEP AS Workshop,19th June 2019 20/22Henry Schreiner and Eduardo Rodrigues DecayLanguage package – conversion of decay models / representations  Decay chains - A universal modelling of decay chains would profit many use cases, e.g. description of components for amplitude analyses  Present code understands AmpGen syntax and can generate code for the GooFit fitter  Note: makes use of the Particle package
  • 21.
    IRIS-HEP AS Workshop,19th June 2019 21/22Henry Schreiner and Eduardo Rodrigues DecayLanguage package – future directions & developments Decay files  Streamline and enhance the .dec parser - Ex.: syntax such as p.find_decay_chains(final_state=[‘K+’, ‘K-’, ‘pi+’, ‘pi-’], extra_particles=[‘pi0’]) could be a neat/trivial way to query the master DECAY.DEC and “find all decay chains leading to either ‘K+ K- pi+ pi-’ or ‘K+ K- pi+ pi- pi0’”  Provide a universal description and visualisation of decay trees (a lot done on this in the last week …) - We already have customers interested, e.g. visualisation of decays in pyhepmc Decay models / representations  Implement more backend formats: GooFit in Python, etc.  Longer term – implement decay logic inside model descriptions - Provide a reference for other packages
  • 22.
    IRIS-HEP AS Workshop,19th June 2019 22/22Henry Schreiner and Eduardo Rodrigues Interested ? Want to try it ? Particle  GitHub: https://github.com/scikit-hep/particle/  Releases: PyPI  Kindly recognise software work – cite us: DecayLanguage  GitHub: https://github.com/scikit-hep/decaylanguage  Releases: PyPI Scikit-HEP project  GitHub: https://github.com/scikit-hep/  Website: http://scikit-hep.org/  Get in touch: http://scikit-hep.org/get-in-touch.html See interactive demos: - Particle - DecayLanguage
  • 23.
    1/4 AmpGen is alibrary for tting and generating multibody particle decays. Takes a decay chain representation and converts into fast, low-level code. Fairly agnostic about the types of particles in the initial / nal state (pseudoscalars, NEW fermions, photons ...) No hard limit on number of particles in the nal state, practically, more than about six bodies is a dicult. Classic three-body (pseudoscalar) decays are a two-body problem (A Dalitz plot). Four-body decays are a ve-dimensional problem =⇒ only unbinned ts are practical. Speed is critical as already have O(106) candidates in many channels, and expecting 10 → 50× these yields by 2030. For a typical four-body amplitude, can perform ∼ 106evaluations/s/core on consumer laptop. Part of the GooFit organisation on GitHub. High Level Code Low Level Code Decay chain representation Decay descriptors:
  • 24.
    2/4 More on theuser interface User species couplings between dierent particles, either partially or as full decay chains, for example: D0{K*(892)bar0,rho(770)0} Couples a D0 meson to a pair of vectors, then if you add the couplings: K*(892)bar0{K-,pi+} K*(892)bar0{K0S0,pi0} K*(892)bar0{K0L0,pi0} rho(770){pi+,pi-} You can generate the amplitude coupling the D0 meson to the various nal states. You can add additional orbital couplings as D0[P]{K*(892)bar0,rho(770)0} D0[D]{K*(892)bar0,rho(770)0} Which will be coherently summed to give the total amplitude, mod-squared to give the dierential rate: P(ψ)dψ ∝ i giAi(ψ) 2 dψ (1)
  • 25.
    3/4 Developments this year Bigdevelopment is the inclusion of spin-half particles in the initial/nal state. Have to deal with additional spin-indicies in the probability / need to incoherently sum the dierent spin congurations. In general, this leads to a rate equation that looks like (for an initial state polarised as ˆρ P (ψ, ˆρ) dψ = ll glgl imm (δmm +σmm ˆρ)Al mi(ψ) Al m i(ψ) ∗ (2) A tricky thing to calculate (and normalise) eciently! Toy examples Λb → Λpp with intermediate spin-3/4 contributions: 2.5 3 3.5 4 4.5 mΛp [GeV/c2 ] 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 ×103 Entries/(0.03GeV/c2 ) 2 2.5 3 3.5 4 4.5 mpp [GeV/c2 ] 0 2 4 6 8 10 12 14 16 18 20 22 24 ×103 Entries/(0.03GeV/c2 ) B → pppp 10 20 30 40 50 10 15 sppp 8 10 12 14 16 18 sppp
  • 26.
    4/4 Future developments With someminor modications, can generate Cuda kernels that can be integrated into GooFit Evaluate amplitude D0 → K∗ 2 (1430)0 [K−π+] π0 on 8.4 million events with 1 CPU core (i7-8550U CPU @ 1.80GHz) vs 1 GPU (GeForce GTX 1050M) GPU version is about a factor of two faster than the OpenMP version (i.e. using 8 cores rather than 1 for the CPU version). Further tuning of the code generator has given another factor of 2 → 3 compared to what is shown here. 1 2 3 sK−π+ GeV2 /c4 0.5 1 1.5 2 2.5 3 sK−π0GeV2 /c4 CPU ∼ 1300ms 1 2 3 sK−π+ GeV2 /c4 0.5 1 1.5 2 2.5 3 sK−π0GeV2 /c4 GPU ∼ 89ms
  • 27.
    Additional notes Cincinnati • Futurework in GooFit: line shapes/spinfactor system, 𝐾 𝑠 𝜋𝜋, support AmpGen baryonic decays - may not be done in a year • Daniel Vieira starts in October Princeton - Henry • ROOT Conda-Forge • Some further work on fitting (GooFit and others) 1/1Henry Schreiner Other projects June 19, 2019
  • 28.
  • 29.
    IRIS-HEP AS Workshop,19th June 2019 24/22Henry Schreiner and Eduardo Rodrigues  PDGID literals - Provide (PDGID class) aliases for the most common particles, with easily recognisable names  All is consistent. Ex.: Particle package – PDG identification code literals  Literals: handy way to manipulate things with human-readable names
  • 30.
    IRIS-HEP AS Workshop,19th June 2019 25/22Henry Schreiner and Eduardo Rodrigues DecayLanguage package – Lark parser grammar for decay files start : _NEWLINE? (line _NEWLINE)+ (End _NEWLINE)? ?line : define | pythia_def | alias | chargeconj | commands | decay | cdecay | setlspw pythia_def : PythiaBothParam LABEL : LABEL = (LABEL | SIGNED_NUMBER) setlspw : SetLineshapePW label label label value cdecay : CDecay label define : Define label value alias : Alias label label chargeconj : ChargeConj label label ?commands : global_photos global_photos : boolean_photos boolean_photos : yesPhotos - yes | noPhotos - no decay : Decay particle _NEWLINE decayline+ Enddecay decayline : value particle* photos? model _NEWLINE // There is always a ; here value : SIGNED_NUMBER photos : PHOTOS label : LABEL particle : LABEL // Add full particle parsing here model : MODEL_NAME model_options? model_options : (value | LABEL)+ %import common.WS_INLINE %import common.SIGNED_NUMBER // New lines filter our comments too, and multiple new lines _NEWLINE: ( /r?n[t ]*/ | COMMENT )+ MODEL_NAME.2 : BaryonPCR|BTO3PI_CP|BTOSLLALI|BTOSLLBALL|BTOXSGAMMA|BTOXSLL| ... LABEL : /[a-zA-Z0-9/-+*_()']+/ COMMENT : /[;#][^n]*/ // We should ignore comments %ignore COMMENT // Disregard spaces in text %ignore WS_INLINE  Decay file parser grammar: decfile.lark !  This file is enough to parse and understand decay files