Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-06-06 08:35:13

0001 // Created by Dmitry Romanov
0002 // Subject to the terms in the LICENSE file found in the top-level directory.
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 /* run_number */) {}
0112 
0113   void Process(int32_t /* run_number */, uint64_t /* event_number */) {
0114     m_parameters_output() = m_algo->produce(*m_hits_input());
0115   }
0116 };
0117 
0118 } // namespace eicrecon