Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 08:17:53

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2024, Wouter Deconinck
0003 
0004 #include <DD4hep/Detector.h>
0005 #include <DD4hep/IDDescriptor.h>
0006 #include <DD4hep/Objects.h>
0007 #include <DD4hep/Readout.h>
0008 #include <DD4hep/Segmentations.h>
0009 #include <algorithms/geo.h>
0010 #include <algorithms/interfaces/UniqueIDGenSvc.h>
0011 #include <services/particle/ParticleSvc.h>
0012 #include <algorithms/random.h>
0013 #include <algorithms/service.h>
0014 #include <catch2/generators/catch_generators_random.hpp>
0015 #include <catch2/interfaces/catch_interfaces_reporter.hpp>
0016 #include <catch2/reporters/catch_reporter_event_listener.hpp>
0017 #include <catch2/reporters/catch_reporter_registrars.hpp>
0018 #include <services/evaluator/EvaluatorSvc.h>
0019 #include <services/pid_lut/PIDLookupTableSvc.h>
0020 #include <cstddef>
0021 #include <cstdint>
0022 #include <functional>
0023 #include <memory>
0024 #include <string>
0025 #include <utility>
0026 
0027 class algorithmsInitListener : public Catch::EventListenerBase {
0028 public:
0029   using Catch::EventListenerBase::EventListenerBase;
0030 
0031   std::unique_ptr<const dd4hep::Detector> m_detector{nullptr};
0032 
0033   void testRunStarting(Catch::TestRunInfo const& /*testRunInfo*/) override {
0034     auto detector = dd4hep::Detector::make_unique("");
0035     detector->addConstant(dd4hep::Constant("MockCalorimeter_ID", "1"));
0036     dd4hep::Readout readout(std::string("MockCalorimeterHits"));
0037     dd4hep::IDDescriptor id_desc("MockCalorimeterHits", "system:8,layer:8,x:8,y:8");
0038     readout.setIDDescriptor(id_desc);
0039     detector->add(id_desc);
0040     detector->add(readout);
0041 
0042     detector->addConstant(dd4hep::Constant("MockTracker_ID", "2"));
0043     dd4hep::Readout readoutTracker(std::string("MockTrackerHits"));
0044     dd4hep::IDDescriptor id_desc_tracker("MockTrackerHits", "system:8,layer:8,x:8,y:8");
0045     //Create segmentation with 1x1 mm pixels
0046     dd4hep::Segmentation segmentation("CartesianGridXY", "TrackerHitsSeg",
0047                                       id_desc_tracker.decoder());
0048     readoutTracker.setIDDescriptor(id_desc_tracker);
0049     readoutTracker.setSegmentation(segmentation);
0050     detector->add(id_desc_tracker);
0051     detector->add(readoutTracker);
0052 
0053     dd4hep::Readout readoutSilicon(std::string("MockSiliconHits"));
0054     dd4hep::IDDescriptor id_desc_Silicon("MockSiliconHits",
0055                                          "system:8,layer:4,module:12,sensor:10,x:40:-8,y:-16");
0056     //Create segmentation with 1x1 mm pixels
0057     dd4hep::Segmentation segmentation_Silicon("CartesianGridXY", "SiliconHitsSeg",
0058                                               id_desc_tracker.decoder());
0059     readoutSilicon.setIDDescriptor(id_desc_Silicon);
0060     readoutSilicon.setSegmentation(segmentation_Silicon);
0061     detector->add(id_desc_Silicon);
0062     detector->add(readoutSilicon);
0063 
0064     m_detector = std::move(detector);
0065 
0066     auto& serviceSvc              = algorithms::ServiceSvc::instance();
0067     [[maybe_unused]] auto& geoSvc = algorithms::GeoSvc::instance();
0068     serviceSvc.setInit<algorithms::GeoSvc>([this](auto&& g) { g.init(this->m_detector.get()); });
0069 
0070     [[maybe_unused]] auto& randomSvc = algorithms::RandomSvc::instance();
0071     auto seed                        = Catch::Generators::Detail::getSeed();
0072     serviceSvc.setInit<algorithms::RandomSvc>([seed](auto&& r) {
0073       r.setProperty("seed", static_cast<std::size_t>(seed));
0074       r.init();
0075     });
0076 
0077     auto& evaluatorSvc = eicrecon::EvaluatorSvc::instance();
0078     serviceSvc.add<eicrecon::EvaluatorSvc>(&evaluatorSvc);
0079 
0080     auto& lutSvc = eicrecon::PIDLookupTableSvc::instance();
0081     serviceSvc.add<eicrecon::PIDLookupTableSvc>(&lutSvc);
0082 
0083     auto& particleSvc = algorithms::ParticleSvc::instance();
0084     serviceSvc.add<algorithms::ParticleSvc>(&particleSvc);
0085 
0086     auto& uniqueIDSvc = algorithms::UniqueIDGenSvc::instance();
0087     serviceSvc.add<algorithms::UniqueIDGenSvc>(&uniqueIDSvc);
0088 
0089     serviceSvc.init();
0090   }
0091 };
0092 
0093 CATCH_REGISTER_LISTENER(algorithmsInitListener)