File indexing completed on 2025-08-03 07:49:18
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Plugins/Root/RootSpacePointIo.hpp"
0010
0011 #include "Acts/EventData/SourceLink.hpp"
0012 #include "Acts/EventData/SpacePointContainer2.hpp"
0013 #include "Acts/EventData/Types.hpp"
0014
0015 #include <TChain.h>
0016 #include <TTree.h>
0017
0018 namespace Acts {
0019
0020 void RootSpacePointIo::connectForRead(
0021 TChain& tchain, const Experimental::SpacePointContainer2& spacePoints) {
0022 using enum Experimental::SpacePointColumns;
0023
0024 if (spacePoints.hasColumns(X)) {
0025 tchain.SetBranchAddress("x", &m_x);
0026 }
0027 if (spacePoints.hasColumns(Y)) {
0028 tchain.SetBranchAddress("y", &m_y);
0029 }
0030 if (spacePoints.hasColumns(Z)) {
0031 tchain.SetBranchAddress("z", &m_z);
0032 }
0033
0034 if (spacePoints.hasColumns(Time)) {
0035 tchain.SetBranchAddress("t", &m_t);
0036 }
0037
0038 if (spacePoints.hasColumns(R)) {
0039 tchain.SetBranchAddress("r", &m_r);
0040 }
0041
0042 if (spacePoints.hasColumns(VarianceZ)) {
0043 tchain.SetBranchAddress("var_z", &m_varZ);
0044 }
0045 if (spacePoints.hasColumns(VarianceR)) {
0046 tchain.SetBranchAddress("var_r", &m_varR);
0047 }
0048 }
0049
0050 void RootSpacePointIo::connectForWrite(
0051 TTree& ttree, const Experimental::SpacePointContainer2& spacePoints) {
0052 using enum Experimental::SpacePointColumns;
0053
0054 if (spacePoints.hasColumns(X)) {
0055 ttree.Branch("x", &m_x);
0056 }
0057 if (spacePoints.hasColumns(Y)) {
0058 ttree.Branch("y", &m_y);
0059 }
0060 if (spacePoints.hasColumns(Z)) {
0061 ttree.Branch("z", &m_z);
0062 }
0063
0064 if (spacePoints.hasColumns(Time)) {
0065 ttree.Branch("t", &m_t);
0066 }
0067
0068 if (spacePoints.hasColumns(R)) {
0069 ttree.Branch("r", &m_r);
0070 }
0071
0072 if (spacePoints.hasColumns(VarianceZ)) {
0073 ttree.Branch("var_z", &m_varZ);
0074 }
0075 if (spacePoints.hasColumns(VarianceR)) {
0076 ttree.Branch("var_r", &m_varR);
0077 }
0078 }
0079
0080 void RootSpacePointIo::write(
0081 const Experimental::ConstSpacePointProxy2& spacePoint) {
0082 using enum Experimental::SpacePointColumns;
0083
0084 if (spacePoint.container().hasColumns(X)) {
0085 m_x = spacePoint.x();
0086 }
0087 if (spacePoint.container().hasColumns(Y)) {
0088 m_y = spacePoint.y();
0089 }
0090 if (spacePoint.container().hasColumns(Z)) {
0091 m_z = spacePoint.z();
0092 }
0093
0094 if (spacePoint.container().hasColumns(Time)) {
0095 m_t = spacePoint.time();
0096 }
0097
0098 if (spacePoint.container().hasColumns(R)) {
0099 m_r = spacePoint.r();
0100 }
0101
0102 if (spacePoint.container().hasColumns(VarianceZ)) {
0103 m_varZ = spacePoint.varianceZ();
0104 }
0105 if (spacePoint.container().hasColumns(VarianceR)) {
0106 m_varR = spacePoint.varianceR();
0107 }
0108 }
0109
0110 void RootSpacePointIo::write(
0111 const Experimental::SpacePointContainer2& spacePoints, TTree& ttree) {
0112 connectForWrite(ttree, spacePoints);
0113
0114 for (Experimental::ConstSpacePointProxy2 spacePoint : spacePoints) {
0115 write(spacePoint);
0116 ttree.Fill();
0117 }
0118 }
0119
0120 void RootSpacePointIo::read(Experimental::MutableSpacePointProxy2& spacePoint,
0121 Experimental::SpacePointIndex2 index) {
0122 using enum Experimental::SpacePointColumns;
0123
0124 if (spacePoint.container().hasColumns(SourceLinks)) {
0125 spacePoint.assignSourceLinks(std::array<SourceLink, 1>{SourceLink(index)});
0126 }
0127
0128 if (spacePoint.container().hasColumns(X)) {
0129 spacePoint.x() = m_x;
0130 }
0131 if (spacePoint.container().hasColumns(Y)) {
0132 spacePoint.y() = m_y;
0133 }
0134 if (spacePoint.container().hasColumns(Z)) {
0135 spacePoint.z() = m_z;
0136 }
0137
0138 if (spacePoint.container().hasColumns(Time)) {
0139 spacePoint.time() = m_t;
0140 }
0141
0142 if (spacePoint.container().hasColumns(R)) {
0143 spacePoint.r() = m_r;
0144 }
0145
0146 if (spacePoint.container().hasColumns(VarianceZ)) {
0147 spacePoint.varianceZ() = m_varZ;
0148 }
0149 if (spacePoint.container().hasColumns(VarianceR)) {
0150 spacePoint.varianceR() = m_varR;
0151 }
0152 }
0153
0154 void RootSpacePointIo::read(TChain& tchain,
0155 Experimental::SpacePointContainer2& spacePoints) {
0156 connectForRead(tchain, spacePoints);
0157
0158 std::size_t nEntries = tchain.GetEntries();
0159 for (std::size_t i = 0; i < nEntries; ++i) {
0160 tchain.GetEntry(i);
0161
0162 auto spacePoint = spacePoints.createSpacePoint();
0163 read(spacePoint, static_cast<Experimental::SpacePointIndex2>(i));
0164 }
0165 }
0166
0167 }