File indexing completed on 2025-08-06 08:18:22
0001 #ifndef ACTSEVALUATOR_H
0002 #define ACTSEVALUATOR_H
0003
0004 #include <fun4all/SubsysReco.h>
0005
0006 #include <trackbase/ActsGeometry.h>
0007 #include <trackbase/ActsSourceLink.h>
0008 #include <trackbase/ActsTrackFittingAlgorithm.h>
0009 #include <trackbase/TrkrDefs.h>
0010
0011 #include <Acts/Utilities/Helpers.hpp>
0012
0013 #include <ActsExamples/EventData/Trajectories.hpp>
0014
0015 class TTree;
0016 class TFile;
0017 class PHG4Particle;
0018 class SvtxTrack;
0019 class SvtxVertexMap;
0020 class SvtxEvalStack;
0021 class SvtxTrackMap;
0022 class PHG4TruthInfoContainer;
0023 class TrkrClusterContainer;
0024 class SvtxEvaluator;
0025 class TrackSeed;
0026 class TrackSeedContainer;
0027
0028 #include <map>
0029 #include <string>
0030 #include <vector>
0031
0032 using SourceLink = ActsSourceLink;
0033 using Trajectory = ActsExamples::Trajectories;
0034 using Measurement = Acts::Measurement<Acts::BoundIndices, 2>;
0035 using Acts::VectorHelpers::eta;
0036 using Acts::VectorHelpers::perp;
0037 using Acts::VectorHelpers::phi;
0038 using Acts::VectorHelpers::theta;
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 class ActsEvaluator
0049 {
0050 public:
0051 ActsEvaluator(const std::string& name = "ActsEvaluator.root");
0052
0053 void Init(PHCompositeNode* topNode);
0054 void process_track(const ActsTrackFittingAlgorithm::TrackContainer& tracks,
0055 std::vector<Acts::MultiTrajectoryTraits::IndexType>& trackTips,
0056 Trajectory::IndexedParameters& paramsMap,
0057 SvtxTrack* track,
0058 const TrackSeed* seed,
0059 const ActsTrackFittingAlgorithm::MeasurementContainer& measurements);
0060 void End();
0061 void isData() { m_isData = true; }
0062 void setEvalCKF(bool evalCKF) { m_evalCKF = evalCKF; }
0063 void verbosity(int verb) { m_verbosity = verb; }
0064 void next_event(PHCompositeNode* topNode);
0065
0066
0067 void evaluateTrackFit(const ActsTrackFittingAlgorithm::TrackContainer& trackContainer,
0068 std::vector<Acts::MultiTrajectoryTraits::IndexType>& trackTips,
0069 Trajectory::IndexedParameters& paramsMap,
0070 SvtxTrack* track,
0071 const TrackSeed* seed,
0072 const ActsTrackFittingAlgorithm::MeasurementContainer& measurements);
0073
0074 private:
0075 int getNodes(PHCompositeNode* topNode);
0076
0077 void initializeTree();
0078
0079 void fillG4Particle(PHG4Particle* part);
0080
0081 void fillProtoTrack(const TrackSeed* seed);
0082
0083 void fillFittedTrackParams(const Trajectory::IndexedParameters& paramsMap,
0084 const size_t& trackTip);
0085
0086 void visitTrackStates(const Acts::ConstVectorMultiTrajectory& traj,
0087 const size_t& trackTip,
0088 const ActsTrackFittingAlgorithm::MeasurementContainer& measurements);
0089
0090 void clearTrackVariables();
0091
0092 Surface getSurface(TrkrDefs::cluskey cluskey, TrkrCluster* cluster);
0093
0094 Acts::Vector3 getGlobalTruthHit(TrkrDefs::cluskey cluskey,
0095 float& _gt);
0096
0097
0098 PHG4TruthInfoContainer* m_truthInfo{nullptr};
0099 SvtxTrackMap* m_trackMap{nullptr};
0100 SvtxEvalStack* m_svtxEvalStack{nullptr};
0101
0102 ActsGeometry* m_tGeometry{nullptr};
0103 TrkrClusterContainer* m_clusterContainer{nullptr};
0104 TrackSeedContainer *m_tpcSeeds{nullptr}, *m_siliconSeeds{nullptr};
0105
0106
0107
0108
0109 bool m_isData = false;
0110 bool m_evalCKF = false;
0111 int m_verbosity = 0;
0112 std::string m_filename;
0113 TFile* m_trackFile{nullptr};
0114 TTree* m_trackTree{nullptr};
0115
0116
0117 int m_eventNr{0};
0118 int m_trajNr{0};
0119 int m_trackNr{0};
0120
0121 unsigned long m_t_barcode{0};
0122 int m_t_charge{0};
0123 float m_t_time{0};
0124 float m_t_vx{NAN};
0125 float m_t_vy{NAN};
0126 float m_t_vz{NAN};
0127 float m_t_px{NAN};
0128 float m_t_py{NAN};
0129 float m_t_pz{NAN};
0130 float m_t_theta{NAN};
0131 float m_t_phi{NAN};
0132 float m_t_pT{NAN};
0133 float m_t_eta{NAN};
0134
0135 std::vector<float> m_t_x;
0136 std::vector<float> m_t_y;
0137 std::vector<float> m_t_z;
0138 std::vector<float> m_t_r;
0139 std::vector<float>
0140 m_t_dx;
0141 std::vector<float>
0142 m_t_dy;
0143 std::vector<float>
0144 m_t_dz;
0145
0146 std::vector<float> m_t_eLOC0;
0147 std::vector<float> m_t_eLOC1;
0148 std::vector<float> m_t_ePHI;
0149 std::vector<float> m_t_eTHETA;
0150 std::vector<float> m_t_eQOP;
0151 std::vector<float> m_t_eT;
0152
0153 int m_nSharedHits{0};
0154 int m_nHoles{0};
0155 int m_nOutliers{0};
0156 int m_nStates{0};
0157 int m_nMeasurements{0};
0158 std::vector<int> m_volumeID;
0159 std::vector<int> m_layerID;
0160 std::vector<int> m_moduleID;
0161 std::vector<int> m_sphenixlayer;
0162 std::vector<float> m_lx_hit;
0163 std::vector<float> m_ly_hit;
0164 std::vector<float> m_x_hit;
0165 std::vector<float> m_y_hit;
0166 std::vector<float> m_z_hit;
0167 std::vector<float> m_res_x_hit;
0168 std::vector<float> m_res_y_hit;
0169 std::vector<float> m_err_x_hit;
0170 std::vector<float> m_err_y_hit;
0171 std::vector<float> m_pull_x_hit;
0172 std::vector<float> m_pull_y_hit;
0173 std::vector<int> m_dim_hit;
0174
0175 bool m_hasFittedParams{false};
0176 float m_eLOC0_fit{NAN};
0177 float m_eLOC1_fit{NAN};
0178 float m_ePHI_fit{NAN};
0179 float m_eTHETA_fit{NAN};
0180 float m_eQOP_fit{NAN};
0181 float m_eT_fit{NAN};
0182 float m_err_eLOC0_fit{NAN};
0183 float m_err_eLOC1_fit{NAN};
0184 float m_err_ePHI_fit{NAN};
0185 float m_err_eTHETA_fit{NAN};
0186 float m_err_eQOP_fit{NAN};
0187 float m_err_eT_fit{NAN};
0188 float m_px_fit{NAN};
0189 float m_py_fit{NAN};
0190 float m_pz_fit{NAN};
0191 float m_x_fit{NAN};
0192 float m_y_fit{NAN};
0193 float m_z_fit{NAN};
0194 float m_chi2_fit{NAN};
0195 float m_quality{NAN};
0196 float m_ndf_fit{NAN};
0197 float m_dca3Dxy{NAN};
0198 float m_dca3Dz{NAN};
0199 float m_dca3DxyCov{NAN};
0200 float m_dca3DzCov{NAN};
0201 int m_charge_fit{-9999999};
0202
0203 int m_nPredicted{0};
0204 std::vector<bool> m_prt;
0205 std::vector<float> m_eLOC0_prt;
0206 std::vector<float> m_eLOC1_prt;
0207 std::vector<float> m_ePHI_prt;
0208 std::vector<float> m_eTHETA_prt;
0209 std::vector<float> m_eQOP_prt;
0210 std::vector<float> m_eT_prt;
0211 std::vector<float> m_res_eLOC0_prt;
0212 std::vector<float> m_res_eLOC1_prt;
0213 std::vector<float> m_res_ePHI_prt;
0214 std::vector<float> m_res_eTHETA_prt;
0215 std::vector<float> m_res_eQOP_prt;
0216 std::vector<float> m_res_eT_prt;
0217 std::vector<float> m_err_eLOC0_prt;
0218 std::vector<float> m_err_eLOC1_prt;
0219 std::vector<float> m_err_ePHI_prt;
0220 std::vector<float> m_err_eTHETA_prt;
0221 std::vector<float> m_err_eQOP_prt;
0222 std::vector<float> m_err_eT_prt;
0223 std::vector<float> m_pull_eLOC0_prt;
0224 std::vector<float> m_pull_eLOC1_prt;
0225 std::vector<float> m_pull_ePHI_prt;
0226 std::vector<float> m_pull_eTHETA_prt;
0227 std::vector<float> m_pull_eQOP_prt;
0228 std::vector<float> m_pull_eT_prt;
0229 std::vector<float> m_x_prt;
0230 std::vector<float> m_y_prt;
0231 std::vector<float> m_z_prt;
0232 std::vector<float> m_px_prt;
0233 std::vector<float> m_py_prt;
0234 std::vector<float> m_pz_prt;
0235 std::vector<float> m_eta_prt;
0236 std::vector<float> m_pT_prt;
0237
0238 int m_nFiltered{0};
0239 std::vector<bool> m_flt;
0240 std::vector<float> m_eLOC0_flt;
0241 std::vector<float> m_eLOC1_flt;
0242 std::vector<float> m_ePHI_flt;
0243 std::vector<float> m_eTHETA_flt;
0244 std::vector<float> m_eQOP_flt;
0245 std::vector<float> m_eT_flt;
0246 std::vector<float> m_res_eLOC0_flt;
0247 std::vector<float> m_res_eLOC1_flt;
0248 std::vector<float> m_res_ePHI_flt;
0249 std::vector<float> m_res_eTHETA_flt;
0250 std::vector<float> m_res_eQOP_flt;
0251 std::vector<float> m_res_eT_flt;
0252 std::vector<float> m_err_eLOC0_flt;
0253 std::vector<float> m_err_eLOC1_flt;
0254 std::vector<float> m_err_ePHI_flt;
0255 std::vector<float> m_err_eTHETA_flt;
0256 std::vector<float> m_err_eQOP_flt;
0257 std::vector<float> m_err_eT_flt;
0258 std::vector<float> m_pull_eLOC0_flt;
0259 std::vector<float> m_pull_eLOC1_flt;
0260 std::vector<float> m_pull_ePHI_flt;
0261 std::vector<float> m_pull_eTHETA_flt;
0262 std::vector<float> m_pull_eQOP_flt;
0263 std::vector<float> m_pull_eT_flt;
0264 std::vector<float> m_x_flt;
0265 std::vector<float> m_y_flt;
0266 std::vector<float> m_z_flt;
0267 std::vector<float> m_px_flt;
0268 std::vector<float> m_py_flt;
0269 std::vector<float> m_pz_flt;
0270 std::vector<float> m_eta_flt;
0271 std::vector<float> m_pT_flt;
0272 std::vector<float> m_chi2;
0273
0274 int m_nSmoothed{0};
0275 std::vector<bool> m_smt;
0276 std::vector<float> m_eLOC0_smt;
0277 std::vector<float> m_eLOC1_smt;
0278 std::vector<float> m_ePHI_smt;
0279 std::vector<float> m_eTHETA_smt;
0280 std::vector<float> m_eQOP_smt;
0281 std::vector<float> m_eT_smt;
0282 std::vector<float> m_res_eLOC0_smt;
0283 std::vector<float> m_res_eLOC1_smt;
0284 std::vector<float> m_res_ePHI_smt;
0285 std::vector<float> m_res_eTHETA_smt;
0286 std::vector<float> m_res_eQOP_smt;
0287 std::vector<float> m_res_eT_smt;
0288 std::vector<float> m_err_eLOC0_smt;
0289 std::vector<float> m_err_eLOC1_smt;
0290 std::vector<float> m_err_ePHI_smt;
0291 std::vector<float> m_err_eTHETA_smt;
0292 std::vector<float> m_err_eQOP_smt;
0293 std::vector<float> m_err_eT_smt;
0294 std::vector<float> m_pull_eLOC0_smt;
0295 std::vector<float> m_pull_eLOC1_smt;
0296 std::vector<float> m_pull_ePHI_smt;
0297 std::vector<float> m_pull_eTHETA_smt;
0298 std::vector<float> m_pull_eQOP_smt;
0299 std::vector<float> m_pull_eT_smt;
0300 std::vector<float> m_x_smt;
0301 std::vector<float> m_y_smt;
0302 std::vector<float> m_z_smt;
0303 std::vector<float> m_px_smt;
0304 std::vector<float> m_py_smt;
0305 std::vector<float> m_pz_smt;
0306 std::vector<float> m_eta_smt;
0307 std::vector<float> m_pT_smt;
0308
0309 float m_protoTrackPx{NAN};
0310 float m_protoTrackPy{NAN};
0311 float m_protoTrackPz{NAN};
0312 float m_protoTrackX{NAN};
0313 float m_protoTrackY{NAN};
0314 float m_protoTrackZ{NAN};
0315 float m_protoD0Cov{NAN};
0316 float m_protoZ0Cov{NAN};
0317 float m_protoPhiCov{NAN};
0318 float m_protoThetaCov{NAN};
0319 float m_protoQopCov{NAN};
0320
0321 std::vector<float> m_SL_lx;
0322 std::vector<float> m_SL_ly;
0323 std::vector<float> m_SLx;
0324 std::vector<float> m_SLy;
0325 std::vector<float> m_SLz;
0326 std::vector<float> m_t_SL_lx;
0327 std::vector<float> m_t_SL_ly;
0328 std::vector<float> m_t_SL_gx;
0329 std::vector<float> m_t_SL_gy;
0330 std::vector<float> m_t_SL_gz;
0331 };
0332
0333 #endif