Speaker
Prof.
Nobuhiko Katayama
(High Energy Accelerator Research Organization)
Description
We developed the original CABS language more than 10 years ago. The main
objective of the language was to describe a decay of a particle as simply as
possible in the context of usual HEP data analysis. A decay mode, for example,
can be defined as follows:
define Cand Dzerobar kpi 2 { K+ identified pi- identified }
hist 1d inv_mass 0 80 1.5 2.3 ``all momentum''
cut inv_mass .ge. 1.83 .and. inv_mass .le. 1.90
...
end-define
where Dzerobar kpi together defines a particle made of K+ and pi-. At the
execution time of the translated C++ code, the list of Dzerobar candidate
combinations are generated from the list of K+ and pi- candidate lists.
The reason we invented the scripting language was the following. Although
C++ allows us to define new class and operators for them and let us write
native C++ code like "Dzerobar = Kplus + piminus" to make combinations, we
thought there was no way to extend it to the cases with more than two
particles; Dzerobar = Kplus + piminus + piplus + piminus to make combinations
out of four particles as the language only defines the binary operator.
After more than ten years, the author learned that it is indeed possible to
define set of classes in C++ and write a single line of code to automatically
generate the list of candidate combinations from generic cases with N(>0)
particles. The same particle can appear more than once at any order. This noble
idea comes from the delayed evaluation of a purely functional language,
Haskell. CABS3 is purely templated so that it incorporates any List class derived
from <vector>.
Submitted on behalf of Collaboration (ex, BaBar, ATLAS) | Belle |
---|
Primary author
Prof.
Nobuhiko Katayama
(High Energy Accelerator Research Organization)