diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml
index f9c6b53cff1..06bcd8864cb 100644
--- a/.github/workflows/builds.yml
+++ b/.github/workflows/builds.yml
@@ -390,6 +390,7 @@ jobs:
-DACTS_FORCE_ASSERTIONS=ON
-DACTS_BUILD_EXAMPLES_EDM4HEP=ON
-DACTS_BUILD_PLUGIN_ACTSVG=ON
+ -DACTS_USE_SYSTEM_NLOHMANN_JSON=ON
- name: Build
run: cmake --build build
- name: ccache stats
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 25ba774defd..542f12e6102 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -48,6 +48,7 @@ clang_tidy:
clang-tidy/clang-tidy.json
--exclude "*thirdparty*"
--exclude "*ActsPodioEdm*"
+ --exclude "*build/_deps/*"
# Check the combined report against the defined limits
- CI/clang_tidy/check_clang_tidy.py --report clang-tidy/clang-tidy.json --config CI/clang_tidy/limits.yml
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e82e70108ad..ceff42fd772 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,8 +37,6 @@ option(ACTS_BUILD_PLUGIN_PODIO "Build Podio plugin" OFF)
option(ACTS_BUILD_PLUGIN_EDM4HEP "Build EDM4hep plugin" OFF)
option(ACTS_BUILD_PLUGIN_FPEMON "Build FPE monitoring plugin" OFF)
option(ACTS_BUILD_PLUGIN_GEOMODEL "Build GeoModel plugin" OFF)
-option(ACTS_BUILD_PLUGIN_COVFIE "Build Covfie plugin" OFF)
-option(ACTS_BUILD_PLUGIN_DETRAY "Build Detray plugin" OFF)
option(ACTS_BUILD_PLUGIN_TRACCC "Build Traccc plugin" OFF)
option(ACTS_USE_SYSTEM_GEOMODEL "Use a system-provided GeoModel installation" ${ACTS_USE_SYSTEM_LIBS})
option(ACTS_BUILD_PLUGIN_GEANT4 "Build Geant4 plugin" OFF)
@@ -50,17 +48,17 @@ option(ACTS_BUILD_PLUGIN_JSON "Build json plugin" OFF)
option(ACTS_USE_SYSTEM_NLOHMANN_JSON "Use nlohmann::json provided by the system instead of the bundled version" ${ACTS_USE_SYSTEM_LIBS})
option(ACTS_BUILD_PLUGIN_LEGACY "Build legacy plugin" OFF)
option(ACTS_BUILD_PLUGIN_ONNX "Build ONNX plugin" OFF)
-option(ACTS_SETUP_COVFIE "Explicitly set up covfie for the project" OFF)
+option(ACTS_SETUP_COVFIE "Explicitly set up covfie for the project" ON)
option(ACTS_USE_SYSTEM_COVFIE "Use a system-provided covfie installation" ${ACTS_USE_SYSTEM_LIBS})
-option(ACTS_SETUP_DETRAY "Explicitly set up detray for the project" OFF)
+option(ACTS_SETUP_DETRAY "Explicitly set up detray for the project" ON)
option(ACTS_USE_SYSTEM_DETRAY "Use a system-provided detray installation" ${ACTS_USE_SYSTEM_LIBS})
-option(ACTS_SETUP_TRACCC "Explicitly set up traccc for the project" OFF)
+option(ACTS_SETUP_TRACCC "Explicitly set up traccc for the project" ON)
option(ACTS_USE_SYSTEM_TRACCC "Use a system-provided traccc installation" ${ACTS_USE_SYSTEM_LIBS})
option(ACTS_SETUP_DFELIBS "Explicitly set up dfelibs for the project" ON)
option(ACTS_USE_SYSTEM_DFELIBS "Use a system-provided dfelibs installation" ${ACTS_USE_SYSTEM_LIBS})
-option(ACTS_SETUP_VECMEM "Explicitly set up vecmem for the project" OFF)
+option(ACTS_SETUP_VECMEM "Explicitly set up vecmem for the project" ON)
option(ACTS_USE_SYSTEM_VECMEM "Use a system-provided vecmem installation" ${ACTS_USE_SYSTEM_LIBS})
-option(ACTS_SETUP_ALGEBRAPLUGINS "Explicitly set up algebra-plugins for the project" OFF)
+option(ACTS_SETUP_ALGEBRAPLUGINS "Explicitly set up algebra-plugins for the project" ON)
option(ACTS_USE_SYSTEM_ALGEBRAPLUGINS "Use a system-provided algebra-plugins installation" ${ACTS_USE_SYSTEM_LIBS})
option(ACTS_BUILD_PLUGIN_TGEO "Build TGeo plugin" OFF)
# fatras related options
@@ -68,7 +66,7 @@ option(ACTS_BUILD_FATRAS "Build FAst TRAcking Simulation package" OFF)
option(ACTS_BUILD_FATRAS_GEANT4 "Build Geant4 Fatras package" OFF)
# alignment related options
option(ACTS_BUILD_ALIGNMENT "Build Alignment package" OFF)
-# examples related options
+# examples related optionsExplicitly set up vecmem for the project
type
option(ACTS_BUILD_EXAMPLES "Build standalone examples" OFF)
option(ACTS_BUILD_EXAMPLES_DD4HEP "Build DD4hep-based code in the examples" OFF)
option(ACTS_BUILD_EXAMPLES_EDM4HEP "Build EDM4hep-based code in the examples" OFF)
@@ -154,9 +152,11 @@ set_option_if(
set_option_if(
ACTS_BUILD_PLUGIN_TGEO
ACTS_BUILD_PLUGIN_DD4HEP OR ACTS_BUILD_EXAMPLES OR ACTS_BUILD_EVERYTHING)
+set_option_if(ACTS_BUILD_PLUGIN_TRACCC
+ ACTS_BUILD_EVERYTHING)
set_option_if(
ACTS_BUILD_PLUGIN_JSON
- ACTS_BUILD_EXAMPLES OR ACTS_BUILD_EVERYTHING)
+ ACTS_BUILD_EXAMPLES OR ACTS_BUILD_EVERYTHING OR ACTS_BUILD_PLUGIN_TRACCC)
set_option_if(
ACTS_BUILD_FATRAS
ACTS_BUILD_EXAMPLES OR ACTS_BUILD_EVERYTHING)
@@ -164,6 +164,8 @@ set_option_if(ACTS_BUILD_PLUGIN_LEGACY ACTS_BUILD_EVERYTHING)
set_option_if(ACTS_BUILD_PLUGIN_EXATRKX ACTS_BUILD_EXAMPLES_EXATRKX)
set_option_if(ACTS_BUILD_PLUGIN_FPEMON
ACTS_BUILD_EXAMPLES OR ACTS_BUILD_EVERYTHING)
+set_option_if(ACTS_BUILD_PLUGIN_TRACCC
+ ACTS_BUILD_EXAMPLES OR ACTS_BUILD_EVERYTHING)
# feature tests
include(CheckCXXSourceCompiles)
@@ -257,24 +259,6 @@ if (ACTS_SETUP_DFELIBS)
endif()
endif()
-if (ACTS_SETUP_VECMEM)
- if (ACTS_USE_SYSTEM_VECMEM)
- find_package(vecmem ${_acts_vecmem_version} REQUIRED)
- else()
- add_subdirectory(thirdparty/vecmem)
- # Make the "VecMem language code" available for the whole project.
- include( "${VECMEM_LANGUAGE_DIR}/vecmem-check-language.cmake" )
- endif()
-endif()
-
-if (ACTS_SETUP_ALGEBRAPLUGINS)
- if (ACTS_USE_SYSTEM_ALGEBRAPLUGINS)
- find_package(algebra-plugins ${_acts_algebraplugins_version} REQUIRED)
- else()
- add_subdirectory(thirdparty/algebra-plugins)
- endif()
-endif()
-
find_package(Filesystem REQUIRED)
# the `_VERSION` variables set by `setup(... VERSION ...)` have
@@ -308,28 +292,9 @@ endmacro()
# the same package twice. This avoids having complex if/else trees to sort out
# when a particular package is actually needed.
+add_definitions(-DALGEBRA_PLUGINS_INCLUDE_ARRAY)
+
# plugin dependencies
-if(ACTS_SETUP_COVFIE)
- if(ACTS_USE_SYSTEM_COVFIE)
- find_package(covfie ${_acts_covfie_version} REQUIRED CONFIG)
- else()
- add_subdirectory(thirdparty/covfie)
- endif()
-endif()
-if(ACTS_SETUP_DETRAY)
- if(ACTS_USE_SYSTEM_DETRAY)
- find_package(detray ${_acts_detray_version} REQUIRED CONFIG)
- else()
- add_subdirectory(thirdparty/detray)
- endif()
-endif()
-if(ACTS_SETUP_TRACCC)
- if(ACTS_USE_SYSTEM_TRACCC)
- find_package(traccc ${_acts_traccc_version} REQUIRED CONFIG)
- else()
- add_subdirectory(thirdparty/traccc)
- endif()
-endif()
if(ACTS_BUILD_PLUGIN_ACTSVG)
if(ACTS_USE_SYSTEM_ACTSVG)
@@ -406,6 +371,49 @@ if(ACTS_BUILD_PLUGIN_GEANT4)
find_package(Geant4 REQUIRED CONFIG COMPONENTS gdml)
endif()
+if (ACTS_BUILD_PLUGIN_TRACCC)
+ if (ACTS_SETUP_VECMEM)
+ if (ACTS_USE_SYSTEM_VECMEM)
+ find_package(vecmem ${_acts_vecmem_version} REQUIRED)
+ else()
+ add_subdirectory(thirdparty/vecmem)
+ endif()
+ endif()
+
+ if (ACTS_SETUP_ALGEBRAPLUGINS)
+ if (ACTS_USE_SYSTEM_ALGEBRAPLUGINS)
+ find_package(algebra-plugins ${_acts_algebraplugins_version} REQUIRED)
+ else()
+ add_subdirectory(thirdparty/algebra-plugins)
+ endif()
+ endif()
+
+ if(ACTS_SETUP_COVFIE)
+ if(ACTS_USE_SYSTEM_COVFIE)
+ find_package(covfie ${_acts_covfie_version} REQUIRED CONFIG)
+ else()
+ add_subdirectory(thirdparty/covfie)
+ endif()
+ endif()
+
+ if(ACTS_SETUP_DETRAY)
+ if(ACTS_USE_SYSTEM_DETRAY)
+ find_package(detray ${_acts_detray_version} REQUIRED CONFIG)
+ else()
+ add_subdirectory(thirdparty/detray)
+ endif()
+ endif()
+
+ if(ACTS_SETUP_TRACCC)
+ if(ACTS_USE_SYSTEM_TRACCC)
+ find_package(traccc ${_acts_traccc_version} REQUIRED CONFIG)
+ else()
+ add_subdirectory(thirdparty/traccc)
+ endif()
+ endif()
+
+endif()
+
# examples dependencies
if(ACTS_BUILD_EXAMPLES)
set(THREADS_PREFER_PTHREAD_FLAG ON)
diff --git a/Core/include/Acts/EventData/MultiTrajectory.hpp b/Core/include/Acts/EventData/MultiTrajectory.hpp
index 0caf463913c..de729c79514 100644
--- a/Core/include/Acts/EventData/MultiTrajectory.hpp
+++ b/Core/include/Acts/EventData/MultiTrajectory.hpp
@@ -89,6 +89,12 @@ class TrackStateRange {
}
}
+ Iterator operator++(int) {
+ Iterator tmp(*this);
+ operator++();
+ return tmp;
+ }
+
bool operator==(const Iterator& other) const {
if (!proxy && !other.proxy) {
return true;
@@ -108,8 +114,8 @@ class TrackStateRange {
TrackStateRange(ProxyType _begin) : m_begin{_begin} {}
TrackStateRange() : m_begin{std::nullopt} {}
- Iterator begin() { return m_begin; }
- Iterator end() { return Iterator{std::nullopt}; }
+ Iterator begin() const { return m_begin; }
+ Iterator end() const { return Iterator{std::nullopt}; }
private:
Iterator m_begin;
diff --git a/Core/include/Acts/Geometry/GeometryHierarchyMap.hpp b/Core/include/Acts/Geometry/GeometryHierarchyMap.hpp
index 1106761d372..63735ac0082 100644
--- a/Core/include/Acts/Geometry/GeometryHierarchyMap.hpp
+++ b/Core/include/Acts/Geometry/GeometryHierarchyMap.hpp
@@ -93,6 +93,16 @@ class GeometryHierarchyMap {
/// Return the number of stored elements.
Size size() const { return m_values.size(); }
+ // Return the geometry identifier - value pairs (i.e., it reconstructs the
+ // input).
+ const std::vector getElements() const {
+ std::vector res;
+ for (std::size_t i = 0; i < size(); i++) {
+ res.push_back({m_ids[i], m_values[i]});
+ }
+ return res;
+ }
+
/// Access the geometry identifier for the i-th element with bounds check.
///
/// @throws std::out_of_range for invalid indices
diff --git a/Core/include/Acts/Utilities/BinningData.hpp b/Core/include/Acts/Utilities/BinningData.hpp
index 01358a4f14c..e00f2c7c016 100644
--- a/Core/include/Acts/Utilities/BinningData.hpp
+++ b/Core/include/Acts/Utilities/BinningData.hpp
@@ -243,10 +243,10 @@ class BinningData {
// ordered after occurrence
if (binvalue == BinningValue::binR || binvalue == BinningValue::binRPhi ||
binvalue == BinningValue::binX || binvalue == BinningValue::binH) {
- return lposition[0];
+ return static_cast(lposition[0]);
}
- return lposition[1];
+ return static_cast(lposition[1]);
}
/// Take the right float value
@@ -260,19 +260,19 @@ class BinningData {
using VectorHelpers::phi;
// ordered after occurrence
if (binvalue == BinningValue::binR || binvalue == BinningValue::binH) {
- return (perp(position));
+ return static_cast(perp(position));
}
if (binvalue == BinningValue::binRPhi) {
- return (perp(position) * phi(position));
+ return static_cast(perp(position) * phi(position));
}
if (binvalue == BinningValue::binEta) {
- return (eta(position));
+ return static_cast(eta(position));
}
if (toUnderlying(binvalue) < 3) {
- return position[toUnderlying(binvalue)];
+ return static_cast(position[toUnderlying(binvalue)]);
}
// phi gauging
- return phi(position);
+ return static_cast(phi(position));
}
/// Get the center value of a bin
@@ -284,7 +284,7 @@ class BinningData {
const std::vector& bvals = boundaries();
// take the center between bin boundaries
float value =
- bin < (bvals.size() - 1) ? 0.5 * (bvals[bin] + bvals[bin + 1]) : 0.;
+ bin < (bvals.size() - 1) ? 0.5f * (bvals[bin] + bvals[bin + 1]) : 0.f;
return value;
}
@@ -296,7 +296,7 @@ class BinningData {
float width(std::size_t bin) const {
const std::vector& bvals = boundaries();
// take the center between bin boundaries
- float value = bin < (bvals.size() - 1) ? bvals[bin + 1] - bvals[bin] : 0.;
+ float value = bin < (bvals.size() - 1) ? bvals[bin + 1] - bvals[bin] : 0.f;
return value;
}
@@ -419,11 +419,11 @@ class BinningData {
/// @return the center value of the bin is given
float centerValue(std::size_t bin) const {
if (zdim) {
- return 0.5 * (min + max);
+ return 0.5f * (min + max);
}
float bmin = m_boundaries[bin];
float bmax = bin < m_boundaries.size() ? m_boundaries[bin + 1] : max;
- return 0.5 * (bmin + bmax);
+ return 0.5f * (bmin + bmax);
}
private:
diff --git a/Examples/Algorithms/CMakeLists.txt b/Examples/Algorithms/CMakeLists.txt
index bdfc0195b7a..1fce8f85245 100644
--- a/Examples/Algorithms/CMakeLists.txt
+++ b/Examples/Algorithms/CMakeLists.txt
@@ -18,3 +18,4 @@ add_subdirectory(Vertexing)
add_subdirectory_if(Alignment ACTS_BUILD_ALIGNMENT)
add_subdirectory(Utilities)
add_subdirectory(AmbiguityResolution)
+add_subdirectory_if(Traccc ACTS_BUILD_PLUGIN_TRACCC)
\ No newline at end of file
diff --git a/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationAlgorithm.hpp b/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationAlgorithm.hpp
index 9fafaf0af21..1c8a0c8e322 100644
--- a/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationAlgorithm.hpp
+++ b/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationAlgorithm.hpp
@@ -96,6 +96,9 @@ class DigitizationAlgorithm final : public IAlgorithm {
/// Geometric digtizer
ActsFatras::Channelizer m_channelizer;
+ using CellsMap =
+ std::map>;
+
ReadDataHandle m_simContainerReadHandle{this,
"SimHitContainer"};
@@ -103,6 +106,7 @@ class DigitizationAlgorithm final : public IAlgorithm {
this, "SourceLinks"};
WriteDataHandle m_measurementWriteHandle{
this, "Measurements"};
+ WriteDataHandle m_cellsWriteHandle{this, "Cells"};
WriteDataHandle m_clusterWriteHandle{this, "Clusters"};
WriteDataHandle>
m_measurementParticlesMapWriteHandle{this, "MeasurementParticlesMap"};
diff --git a/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationConfig.hpp b/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationConfig.hpp
index bea13649440..1a360c9dd1a 100644
--- a/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationConfig.hpp
+++ b/Examples/Algorithms/Digitization/include/ActsExamples/Digitization/DigitizationConfig.hpp
@@ -139,6 +139,8 @@ class DigitizationConfig {
std::string outputSourceLinks = "sourcelinks";
/// Output measurements collection.
std::string outputMeasurements = "measurements";
+ /// Output cells map (geoID -> collection of cells).
+ std::string outputCells = "cells";
/// Output cluster collection.
std::string outputClusters = "clusters";
/// Output collection to map measured hits to contributing particles.
@@ -155,7 +157,7 @@ class DigitizationConfig {
/// How close do parameters have to be to consider merged
const double mergeNsigma;
/// Consider clusters that share a corner as merged (8-cell connectivity)
- const bool mergeCommonCorner;
+ bool mergeCommonCorner;
/// Energy deposit threshold for accepting a hit
/// For a generic readout frontend we assume 1000 e/h pairs, in Si each
/// e/h-pair requiers on average an energy of 3.65 eV (PDG review 2023,
diff --git a/Examples/Algorithms/Digitization/src/DigitizationAlgorithm.cpp b/Examples/Algorithms/Digitization/src/DigitizationAlgorithm.cpp
index f3b04ac0aff..ddf3a16bc79 100644
--- a/Examples/Algorithms/Digitization/src/DigitizationAlgorithm.cpp
+++ b/Examples/Algorithms/Digitization/src/DigitizationAlgorithm.cpp
@@ -72,6 +72,7 @@ ActsExamples::DigitizationAlgorithm::DigitizationAlgorithm(
m_simContainerReadHandle.initialize(m_cfg.inputSimHits);
m_sourceLinkWriteHandle.initialize(m_cfg.outputSourceLinks);
m_measurementWriteHandle.initialize(m_cfg.outputMeasurements);
+ m_cellsWriteHandle.initialize(m_cfg.outputCells);
m_clusterWriteHandle.initialize(m_cfg.outputClusters);
m_measurementParticlesMapWriteHandle.initialize(
m_cfg.outputMeasurementParticlesMap);
@@ -154,6 +155,10 @@ ActsExamples::ProcessCode ActsExamples::DigitizationAlgorithm::execute(
// Some statistics
std::size_t skippedHits = 0;
+ // Some algorithms do the clusterization themselves such as the traccc chain.
+ // Thus we need to store the cell data from the simulation.
+ CellsMap cellsMap;
+
ACTS_DEBUG("Starting loop over modules ...");
for (const auto& simHitsGroup : groupByModule(simHits)) {
// Manual pair unpacking instead of using
@@ -255,8 +260,18 @@ ActsExamples::ProcessCode ActsExamples::DigitizationAlgorithm::execute(
moduleClusters.add(std::move(dParameters), simHitIdx);
}
- for (auto& [dParameters, simhits] :
- moduleClusters.digitizedParameters()) {
+ auto digitizeParametersResult = moduleClusters.digitizedParameters();
+
+ // Store the data of the cells from the simulation.
+ std::vector cells;
+ for (auto& [dParameters, simhits] : digitizeParametersResult) {
+ for (auto cell : dParameters.cluster.channels) {
+ cells.push_back(std::move(cell));
+ }
+ }
+ cellsMap.insert({moduleGeoId, cells});
+
+ for (auto& [dParameters, simhits] : digitizeParametersResult) {
// The measurement container is unordered and the index under which
// the measurement will be stored is known before adding it.
Index measurementIdx = measurements.size();
@@ -293,6 +308,7 @@ ActsExamples::ProcessCode ActsExamples::DigitizationAlgorithm::execute(
m_sourceLinkWriteHandle(ctx, std::move(sourceLinks));
m_measurementWriteHandle(ctx, std::move(measurements));
+ m_cellsWriteHandle(ctx, std::move(cellsMap));
m_clusterWriteHandle(ctx, std::move(clusters));
m_measurementParticlesMapWriteHandle(ctx, std::move(measurementParticlesMap));
m_measurementSimHitsMapWriteHandle(ctx, std::move(measurementSimHitsMap));
diff --git a/Examples/Algorithms/Traccc/CMakeLists.txt b/Examples/Algorithms/Traccc/CMakeLists.txt
new file mode 100644
index 00000000000..4f969248ae2
--- /dev/null
+++ b/Examples/Algorithms/Traccc/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(Common)
+add_subdirectory(Host)
\ No newline at end of file
diff --git a/Examples/Algorithms/Traccc/Common/CMakeLists.txt b/Examples/Algorithms/Traccc/Common/CMakeLists.txt
new file mode 100644
index 00000000000..826632ec5f4
--- /dev/null
+++ b/Examples/Algorithms/Traccc/Common/CMakeLists.txt
@@ -0,0 +1,26 @@
+add_library(
+ ActsExamplesTracccCommon SHARED
+ src/TracccChainAlgorithmBase.cpp
+ src/Conversion/CellMapConversion.cpp
+ src/Conversion/DigitizationConversion.cpp
+ src/Conversion/MeasurementConversion.cpp
+ src/Debug/Debug.cpp
+)
+
+target_include_directories(
+ ActsExamplesTracccCommon
+ PUBLIC $
+)
+
+target_link_libraries(
+ ActsExamplesTracccCommon
+ PUBLIC
+ ActsPluginTraccc
+ ActsExamplesFramework
+ ActsExamplesDigitization
+)
+
+install(
+ TARGETS ActsExamplesTracccCommon
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
diff --git a/Examples/Algorithms/Traccc/Common/include/ActsExamples/Traccc/Common/Conversion/CellMapConversion.hpp b/Examples/Algorithms/Traccc/Common/include/ActsExamples/Traccc/Common/Conversion/CellMapConversion.hpp
new file mode 100644
index 00000000000..61ec39fe5cc
--- /dev/null
+++ b/Examples/Algorithms/Traccc/Common/include/ActsExamples/Traccc/Common/Conversion/CellMapConversion.hpp
@@ -0,0 +1,34 @@
+// This file is part of the Acts project.
+//
+// Copyright (C) 2023 CERN for the benefit of the Acts project
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+// Acts include(s)
+#include "Acts/Geometry/GeometryIdentifier.hpp"
+
+// Acts Examples include(s)
+#include "ActsExamples/EventData/Cluster.hpp"
+
+// Traccc include(s)
+#include "traccc/edm/cell.hpp"
+
+// System include(s).
+#include
+#include
+#include