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