File indexing completed on 2025-06-06 08:35:13
0001
0002
0003
0004
0005 #pragma once
0006
0007 #include <JANA/JEvent.h>
0008 #include <edm4eic/TrackParametersCollection.h>
0009 #include <memory>
0010 #include <string>
0011 #include <utility>
0012 #include <vector>
0013
0014 #include "algorithms/tracking/OrthogonalTrackSeedingConfig.h"
0015 #include "algorithms/tracking/TrackSeeding.h"
0016 #include "extensions/jana/JOmniFactory.h"
0017 #include "services/geometry/acts/ACTSGeo_service.h"
0018
0019 namespace eicrecon {
0020
0021 class TrackSeeding_factory
0022 : public JOmniFactory<TrackSeeding_factory, OrthogonalTrackSeedingConfig> {
0023
0024 private:
0025 using AlgoT = eicrecon::TrackSeeding;
0026 std::unique_ptr<AlgoT> m_algo;
0027
0028 PodioInput<edm4eic::TrackerHit> m_hits_input{this};
0029 PodioOutput<edm4eic::TrackParameters> m_parameters_output{this};
0030
0031 ParameterRef<float> m_rMax{this, "rMax", config().rMax,
0032 "max measurement radius for Acts::OrthogonalSeedFinder"};
0033 ParameterRef<float> m_rMin{this, "rMin", config().rMin,
0034 "min measurement radius for Acts::OrthogonalSeedFinder"};
0035 ParameterRef<float> m_deltaRMinTopSP{this, "deltaRMinTopSP", config().deltaRMinTopSP,
0036 "min distance in r between middle and top space point in "
0037 "one seed for Acts::OrthogonalSeedFinder"};
0038 ParameterRef<float> m_deltaRMaxTopSP{this, "deltaRMaxTopSP", config().deltaRMaxTopSP,
0039 "max distance in r between middle and top space point in "
0040 "one seed for Acts::OrthogonalSeedFinder"};
0041 ParameterRef<float> m_deltaRMinBottomSP{this, "deltaRMinBottomSP", config().deltaRMinBottomSP,
0042 "min distance in r between bottom and middle space point "
0043 "in one seed for Acts::OrthogonalSeedFinder"};
0044 ParameterRef<float> m_deltaRMaxBottomSP{this, "deltaRMaxBottomSP", config().deltaRMaxBottomSP,
0045 "max distance in r between bottom and middle space point "
0046 "in one seed for Acts::OrthogonalSeedFinder"};
0047 ParameterRef<float> m_collisionRegionMin{
0048 this, "collisionRegionMin", config().collisionRegionMin,
0049 "min location in z for collision region for Acts::OrthogonalSeedFinder"};
0050 ParameterRef<float> m_collisionRegionMax{
0051 this, "collisionRegionMax", config().collisionRegionMax,
0052 "max location in z for collision region for Acts::OrthogonalSeedFinder"};
0053 ParameterRef<float> m_zMax{this, "zMax", config().zMax,
0054 "Max z location for measurements for Acts::OrthogonalSeedFinder"};
0055 ParameterRef<float> m_zMin{this, "zMin", config().zMin,
0056 "Min z location for measurements for Acts::OrthogonalSeedFinder"};
0057 ParameterRef<unsigned int> m_maxSeedsPerSpM{this, "maxSeedsPerSpM", config().maxSeedsPerSpM,
0058 "Maximum number of seeds one space point can be the "
0059 "middle of for Acts::OrthogonalSeedFinder"};
0060 ParameterRef<float> m_cotThetaMax{this, "cotThetaMax", config().cotThetaMax,
0061 "cot of maximum theta angle for Acts::OrthogonalSeedFinder"};
0062 ParameterRef<float> m_sigmaScattering{
0063 this, "sigmaScattering", config().sigmaScattering,
0064 "number of sigmas of scattering angle to consider for Acts::OrthogonalSeedFinder"};
0065 ParameterRef<float> m_radLengthPerSeed{
0066 this, "radLengthPerSeed", config().radLengthPerSeed,
0067 "Approximate number of radiation lengths one seed traverses for Acts::OrthogonalSeedFinder"};
0068 ParameterRef<float> m_minPt{this, "minPt", config().minPt,
0069 "Minimum pT to search for for Acts::OrthogonalSeedFinder"};
0070 ParameterRef<float> m_bFieldInZ{
0071 this, "bFieldInZ", config().bFieldInZ,
0072 "Value of B Field to use in kiloTesla for Acts::OrthogonalSeedFinder"};
0073 ParameterRef<float> m_beamPosX{this, "beamPosX", config().beamPosX,
0074 "Beam position in x for Acts::OrthogonalSeedFinder"};
0075 ParameterRef<float> m_beamPosY{this, "beamPosY", config().beamPosY,
0076 "Beam position in y for Acts::OrthogonalSeedFinder"};
0077 ParameterRef<float> m_impactMax{
0078 this, "impactMax", config().impactMax,
0079 "maximum impact parameter allowed for seeds for Acts::OrthogonalSeedFinder. rMin should be "
0080 "larger than impactMax."};
0081 ParameterRef<float> m_rMinMiddle{
0082 this, "rMinMiddle", config().rMinMiddle,
0083 "min radius for middle space point for Acts::OrthogonalSeedFinder"};
0084 ParameterRef<float> m_rMaxMiddle{
0085 this, "rMaxMiddle", config().rMaxMiddle,
0086 "max radius for middle space point for Acts::OrthogonalSeedFinder"};
0087 ParameterRef<float> m_deltaPhiMax{this, "deltaPhiMax", config().deltaPhiMax,
0088 "Max phi difference between middle and top/bottom space point"};
0089 ParameterRef<float> m_locaError{this, "loc_a_Error", config().locaError,
0090 "Error on Loc a for Acts::OrthogonalSeedFinder"};
0091 ParameterRef<float> m_locbError{this, "loc_b_Error", config().locbError,
0092 "Error on Loc b for Acts::OrthogonalSeedFinder"};
0093 ParameterRef<float> m_phiError{this, "phi_Error", config().phiError,
0094 "Error on phi for Acts::OrthogonalSeedFinder"};
0095 ParameterRef<float> m_thetaError{this, "theta_Error", config().thetaError,
0096 "Error on theta for Acts::OrthogonalSeedFinder"};
0097 ParameterRef<float> m_qOverPError{this, "qOverP_Error", config().qOverPError,
0098 "Error on q/p for Acts::OrthogonalSeedFinder"};
0099 ParameterRef<float> m_timeError{this, "time_Error", config().timeError,
0100 "Error on time for Acts::OrthogonalSeedFinder"};
0101
0102 Service<ACTSGeo_service> m_ACTSGeoSvc{this};
0103
0104 public:
0105 void Configure() {
0106 m_algo = std::make_unique<AlgoT>();
0107 m_algo->applyConfig(config());
0108 m_algo->init(m_ACTSGeoSvc().actsGeoProvider(), logger());
0109 }
0110
0111 void ChangeRun(int32_t ) {}
0112
0113 void Process(int32_t , uint64_t ) {
0114 m_parameters_output() = m_algo->produce(*m_hits_input());
0115 }
0116 };
0117
0118 }