Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:18:26

0001 
0002 #include "PHActsTrackPropagator.h"
0003 
0004 #include <fun4all/Fun4AllReturnCodes.h>
0005 #include <phool/PHCompositeNode.h>
0006 #include <phool/PHDataNode.h>
0007 #include <phool/PHNode.h>
0008 #include <phool/PHNodeIterator.h>
0009 #include <phool/PHObject.h>
0010 #include <phool/PHTimer.h>
0011 #include <phool/getClass.h>
0012 #include <phool/phool.h>
0013 
0014 #include <trackbase/ActsAborter.h>
0015 #include <trackbase/ActsTrackFittingAlgorithm.h>
0016 
0017 #include <trackbase_historic/ActsTransformations.h>
0018 #include <trackbase_historic/SvtxTrackMap.h>
0019 #include <trackbase_historic/SvtxTrackState.h>
0020 #include <trackbase_historic/SvtxTrackState_v1.h>
0021 
0022 #include <globalvertex/SvtxVertex.h>
0023 #include <globalvertex/SvtxVertexMap.h>
0024 
0025 #include <Acts/Geometry/GeometryIdentifier.hpp>
0026 #include <Acts/MagneticField/MagneticFieldProvider.hpp>
0027 #include <Acts/Surfaces/PerigeeSurface.hpp>
0028 
0029 //____________________________________________________________________________..
0030 PHActsTrackPropagator::PHActsTrackPropagator(const std::string &name)
0031   : SubsysReco(name)
0032 {
0033 }
0034 
0035 //____________________________________________________________________________..
0036 PHActsTrackPropagator::~PHActsTrackPropagator()
0037 {
0038 }
0039 
0040 //____________________________________________________________________________..
0041 int PHActsTrackPropagator::Init(PHCompositeNode *)
0042 {
0043   return Fun4AllReturnCodes::EVENT_OK;
0044 }
0045 
0046 //____________________________________________________________________________..
0047 int PHActsTrackPropagator::InitRun(PHCompositeNode *topNode)
0048 {
0049   int ret = getNodes(topNode);
0050 
0051   return ret;
0052 }
0053 
0054 //____________________________________________________________________________..
0055 int PHActsTrackPropagator::process_event(PHCompositeNode *)
0056 {
0057   ActsPropagator prop(m_tGeometry);
0058   for (auto &[key, track] : *m_trackMap)
0059   {
0060     auto params = prop.makeTrackParams(track, m_vertexMap);
0061     if(!params.ok())
0062       {
0063     continue;
0064       }
0065     auto result = propagateTrack(params.value());
0066     if (result.ok())
0067     {
0068       addTrackState(result, track);
0069     }
0070   }
0071 
0072   return Fun4AllReturnCodes::EVENT_OK;
0073 }
0074 
0075 void PHActsTrackPropagator::addTrackState(
0076     BoundTrackParamResult &result,
0077     SvtxTrack *svtxTrack)
0078 {
0079   float pathlength = result.value().first / Acts::UnitConstants::cm;
0080   auto params = result.value().second;
0081 
0082   SvtxTrackState_v1 out(pathlength);
0083 
0084   auto projectionPos = params.position(m_tGeometry->geometry().getGeoContext());
0085   const auto momentum = params.momentum();
0086   out.set_x(projectionPos.x() / Acts::UnitConstants::cm);
0087   out.set_y(projectionPos.y() / Acts::UnitConstants::cm);
0088   out.set_z(projectionPos.z() / Acts::UnitConstants::cm);
0089   out.set_px(momentum.x());
0090   out.set_py(momentum.y());
0091   out.set_pz(momentum.z());
0092 
0093   if (Verbosity() > 1)
0094   {
0095     std::cout << "Adding track state for layer " << m_sphenixLayer
0096               << " with path length " << pathlength << " with position "
0097               << projectionPos.transpose() << std::endl;
0098   }
0099 
0100   ActsTransformations transformer;
0101   const auto globalCov = transformer.rotateActsCovToSvtxTrack(params);
0102   for (int i = 0; i < 6; ++i)
0103   {
0104     for (int j = 0; j < 6; ++j)
0105     {
0106       out.set_error(i, j, globalCov(i, j));
0107     }
0108   }
0109 
0110   svtxTrack->insert_state(&out);
0111 }
0112 
0113 PHActsTrackPropagator::BoundTrackParamResult
0114 PHActsTrackPropagator::propagateTrack(const Acts::BoundTrackParameters &params)
0115 {
0116   ActsPropagator propagator(m_tGeometry);
0117   propagator.verbosity(Verbosity());
0118 
0119   return propagator.propagateTrack(params, m_sphenixLayer);
0120 }
0121 
0122 //____________________________________________________________________________..
0123 int PHActsTrackPropagator::End(PHCompositeNode *)
0124 {
0125   return Fun4AllReturnCodes::EVENT_OK;
0126 }
0127 
0128 //____________________________________________________________________________..
0129 void PHActsTrackPropagator::Print(const std::string &what) const
0130 {
0131   std::cout << "PHActsTrackPropagator:: " << what << std::endl;
0132 }
0133 
0134 int PHActsTrackPropagator::getNodes(PHCompositeNode *topNode)
0135 {
0136   m_vertexMap = findNode::getClass<SvtxVertexMap>(topNode, "SvtxVertexMap");
0137   if (!m_vertexMap)
0138   {
0139     std::cout << PHWHERE << "No vertex map on node tree, bailing."
0140               << std::endl;
0141     return Fun4AllReturnCodes::ABORTEVENT;
0142   }
0143 
0144   m_tGeometry = findNode::getClass<ActsGeometry>(
0145       topNode, "ActsGeometry");
0146   if (!m_tGeometry)
0147   {
0148     std::cout << "ActsTrackingGeometry not on node tree. Exiting."
0149               << std::endl;
0150 
0151     return Fun4AllReturnCodes::ABORTEVENT;
0152   }
0153 
0154   m_trackMap = findNode::getClass<SvtxTrackMap>(topNode, "SvtxTrackMap");
0155   if (!m_trackMap)
0156   {
0157     std::cout << PHWHERE << "No SvtxTrackMap on node tree. Bailing."
0158               << std::endl;
0159     return Fun4AllReturnCodes::ABORTEVENT;
0160   }
0161 
0162   return Fun4AllReturnCodes::EVENT_OK;
0163 }