File indexing completed on 2025-09-17 08:02:57
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "ActsExamples/Io/Csv/CsvSpacePointWriter.hpp"
0010
0011 #include "Acts/EventData/SourceLink.hpp"
0012 #include "Acts/Geometry/GeometryIdentifier.hpp"
0013 #include "Acts/Utilities/Logger.hpp"
0014 #include "ActsExamples/EventData/IndexSourceLink.hpp"
0015 #include "ActsExamples/EventData/SimSpacePoint.hpp"
0016 #include "ActsExamples/Framework/AlgorithmContext.hpp"
0017 #include "ActsExamples/Framework/ProcessCode.hpp"
0018 #include "ActsExamples/Framework/WriterT.hpp"
0019 #include "ActsExamples/Io/Csv/CsvInputOutput.hpp"
0020 #include "ActsExamples/Utilities/Paths.hpp"
0021
0022 #include <string>
0023 #include <vector>
0024
0025 #include "CsvOutputData.hpp"
0026
0027 ActsExamples::CsvSpacePointWriter::CsvSpacePointWriter(
0028 const ActsExamples::CsvSpacePointWriter::Config& config,
0029 Acts::Logging::Level level)
0030 : WriterT(config.inputSpacepoints, "CsvSpacePointWriter", level),
0031 m_cfg(config) {}
0032
0033 ActsExamples::CsvSpacePointWriter::~CsvSpacePointWriter() = default;
0034
0035 ActsExamples::ProcessCode ActsExamples::CsvSpacePointWriter::finalize() {
0036
0037 return ProcessCode::SUCCESS;
0038 }
0039
0040 ActsExamples::ProcessCode ActsExamples::CsvSpacePointWriter::writeT(
0041 const AlgorithmContext& ctx, const SimSpacePointContainer& spacepoints) {
0042
0043 std::string pathSP =
0044 perEventFilepath(m_cfg.outputDir, "spacepoint.csv", ctx.eventNumber);
0045
0046 ActsExamples::NamedTupleCsvWriter<SpacepointData> writerSP(
0047 pathSP, m_cfg.outputPrecision);
0048
0049 SpacepointData spData{};
0050 for (const auto& sp : spacepoints) {
0051 const auto slink1 = sp.sourceLinks()[0].get<IndexSourceLink>();
0052 spData.measurement_id_1 = slink1.index();
0053 spData.geometry_id_1 = slink1.geometryId().value();
0054 if (sp.sourceLinks().size() == 2) {
0055 const auto slink2 = sp.sourceLinks()[1].get<IndexSourceLink>();
0056 spData.measurement_id_2 = slink2.index();
0057 spData.geometry_id_2 = slink2.geometryId().value();
0058 } else {
0059 spData.measurement_id_2 = std::numeric_limits<std::uint64_t>::max();
0060 spData.geometry_id_2 = 0;
0061 }
0062 spData.x = sp.x() / Acts::UnitConstants::mm;
0063 spData.y = sp.y() / Acts::UnitConstants::mm;
0064 spData.z = sp.z() / Acts::UnitConstants::mm;
0065 spData.t = sp.t() ? *sp.t() / Acts::UnitConstants::ns
0066 : std::numeric_limits<double>::quiet_NaN();
0067 spData.var_r = sp.varianceR() / Acts::UnitConstants::mm;
0068 spData.var_z = sp.varianceZ() / Acts::UnitConstants::mm;
0069 writerSP.append(spData);
0070 }
0071 return ActsExamples::ProcessCode::SUCCESS;
0072 }