diff --git a/docs/source/usage/parameters.rst b/docs/source/usage/parameters.rst index cead06324..3b13b3e43 100644 --- a/docs/source/usage/parameters.rst +++ b/docs/source/usage/parameters.rst @@ -354,9 +354,14 @@ Lattice Elements = c parameter * sqrt(Twiss beta) - * ``BeamMonitor`` a beam monitor, writing all beam particles at fixed ``s`` to openPMD files. + * ``beam_monitor`` a beam monitor, writing all beam particles at fixed ``s`` to openPMD files. If the same element name is used multiple times, then an output series is created with multiple outputs. + * ``.name`` (``string``, default value: ````) + + The output series name to use. + By default, output is created under ``diags/openPMD/.``. + * ``.backend`` (``string``, default value: ``default``) `I/O backend `_ for `openPMD `_ data dumps. diff --git a/src/initialization/InitElement.cpp b/src/initialization/InitElement.cpp index 29fbcf494..100f9e6b7 100644 --- a/src/initialization/InitElement.cpp +++ b/src/initialization/InitElement.cpp @@ -180,11 +180,13 @@ namespace detail detail::queryAddResize(pp_element, "sin_coefficients", sin_coef); m_lattice.emplace_back( SoftQuadrupole(ds, gscale, cos_coef, sin_coef, mapsteps, nslice) ); } else if (element_type == "beam_monitor") { + std::string openpmd_name = element_name; + pp_element.queryAdd("name", openpmd_name); std::string openpmd_backend = "default"; pp_element.queryAdd("backend", openpmd_backend); std::string openpmd_encoding {"g"}; pp_element.queryAdd("encoding", openpmd_encoding); - m_lattice.emplace_back( diagnostics::BeamMonitor(element_name, openpmd_backend, openpmd_encoding) ); + m_lattice.emplace_back( diagnostics::BeamMonitor(openpmd_name, openpmd_backend, openpmd_encoding) ); } else { amrex::Abort("Unknown type for lattice element " + element_name + ": " + element_type); }