Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:28:09

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2023  - 2025 Joe Osborn, Dmitry Romanov, Wouter Deconinck
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 /* run_number */, uint64_t /* event_number */) {
0112     m_algo->process({m_hits_input()}, {m_parameters_output().get()});
0113   }
0114 };
0115 
0116 } // namespace eicrecon