Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 07:49:18

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
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 }  // namespace Acts