File indexing completed on 2026-09-10 08:20:25
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "ActsExamples/Io/Csv/CsvSpacePointReader.hpp"
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/EventData/SourceLink.hpp"
0013 #include "ActsExamples/EventData/SpacePoint.hpp"
0014 #include "ActsExamples/Framework/AlgorithmContext.hpp"
0015 #include "ActsExamples/Io/Csv/CsvInputOutput.hpp"
0016 #include "ActsExamples/Utilities/Paths.hpp"
0017
0018 #include <stdexcept>
0019 #include <string>
0020
0021 #include "CsvOutputData.hpp"
0022
0023 namespace ActsExamples {
0024
0025 CsvSpacePointReader::CsvSpacePointReader(const Config& cfg,
0026 Acts::Logging::Level lvl)
0027 : m_cfg{cfg} {
0028 if (m_cfg.inputStem.empty()) {
0029 throw std::invalid_argument("Missing input filename stem");
0030 }
0031 if (m_cfg.inputCollection != "pixel" && m_cfg.inputCollection != "strip" &&
0032 m_cfg.inputCollection != "overlap") {
0033 throw std::invalid_argument("Invalid input collection " +
0034 m_cfg.inputCollection);
0035 }
0036
0037 auto& filename = m_cfg.inputCollection.empty()
0038 ? cfg.inputStem
0039 : cfg.inputStem + '_' + cfg.inputCollection;
0040 m_eventsRange = determineEventFilesRange(cfg.inputDir, filename + ".csv");
0041 m_logger = Acts::getDefaultLogger("CsvSpacePointReader", lvl);
0042
0043 m_outputSpacePoints.initialize(m_cfg.outputSpacePoints);
0044 }
0045
0046 std::string CsvSpacePointReader::CsvSpacePointReader::name() const {
0047 return "CsvSpacePointReader";
0048 }
0049
0050 std::pair<std::size_t, std::size_t> CsvSpacePointReader::availableEvents()
0051 const {
0052 return m_eventsRange;
0053 }
0054
0055 ProcessCode CsvSpacePointReader::read(const AlgorithmContext& ctx) {
0056 SpacePointContainer spacePoints(
0057 SpacePointColumns::SourceLinks | SpacePointColumns::X |
0058 SpacePointColumns::Y | SpacePointColumns::Z |
0059 SpacePointColumns::VarianceR | SpacePointColumns::VarianceZ |
0060 SpacePointColumns::StripCalibrationDetails);
0061
0062 const auto& filename = m_cfg.inputCollection.empty()
0063 ? m_cfg.inputStem
0064 : m_cfg.inputStem + '_' + m_cfg.inputCollection;
0065 const auto& path =
0066 perEventFilepath(m_cfg.inputDir, filename + ".csv", ctx.eventNumber);
0067
0068 BoostDescribeCsvReader<SpacePointData> reader(path);
0069 SpacePointData data;
0070
0071 while (reader.read(data)) {
0072 auto sp = spacePoints.createSpacePoint();
0073 sp.assignSourceLinks(std::array{Acts::SourceLink(data.measurement_id)});
0074 sp.x() = data.sp_x;
0075 sp.y() = data.sp_y;
0076 sp.z() = data.sp_z;
0077 sp.varianceR() = data.sp_covr;
0078 sp.varianceZ() = data.sp_covz;
0079
0080 if (m_cfg.extendCollection) {
0081 const Acts::Vector3 innerStripHalfVector =
0082 Acts::Vector3(data.sp_bottomStripDirection_0,
0083 data.sp_bottomStripDirection_1,
0084 data.sp_bottomStripDirection_2) *
0085 data.sp_bottomHalfStripLength;
0086 const Acts::Vector3 outerStripCenter(data.sp_topStripCenterPosition_0,
0087 data.sp_topStripCenterPosition_1,
0088 data.sp_topStripCenterPosition_2);
0089 const Acts::Vector3 outerStripHalfVector =
0090 Acts::Vector3(data.sp_topStripDirection_0,
0091 data.sp_topStripDirection_1,
0092 data.sp_topStripDirection_2) *
0093 data.sp_topHalfStripLength;
0094 const Acts::Vector3 stripSeparation(data.sp_stripCenterDistance_0,
0095 data.sp_stripCenterDistance_1,
0096 data.sp_stripCenterDistance_2);
0097
0098 Eigen::Map<Eigen::Vector3f>(
0099 sp.outerStripCalibrationDetails().outerCenter.data()) =
0100 outerStripCenter.cast<float>();
0101 Eigen::Map<Eigen::Vector3f>(
0102 sp.outerStripCalibrationDetails().innerToOuterSeparation.data()) =
0103 stripSeparation.cast<float>();
0104 Eigen::Map<Eigen::Vector3f>(
0105 sp.outerStripCalibrationDetails().outerHalfVector.data()) =
0106 outerStripHalfVector.cast<float>();
0107 Eigen::Map<Eigen::Vector3f>(
0108 sp.outerStripCalibrationDetails().innerHalfVector.data()) =
0109 innerStripHalfVector.cast<float>();
0110 }
0111 }
0112
0113 ACTS_DEBUG("Created " << spacePoints.size() << " " << m_cfg.inputCollection
0114 << " space points");
0115 m_outputSpacePoints(ctx, std::move(spacePoints));
0116
0117 return ProcessCode::SUCCESS;
0118 }
0119
0120 }