Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-07-03 07:05:27

0001 // Copyright 2022, David Lawrence
0002 // Subject to the terms in the LICENSE file found in the top-level directory.
0003 //
0004 //
0005 
0006 #include "ACTSGeo_service.h"
0007 
0008 #include <Acts/Visualization/ViewConfig.hpp>
0009 #include <JANA/JException.h>
0010 #include <array>
0011 #include <exception>
0012 #include <gsl/pointers>
0013 #include <stdexcept>
0014 #include <string>
0015 
0016 #include "ActsGeometryProvider.h"
0017 #include "services/geometry/dd4hep/DD4hep_service.h"
0018 #include "services/log/Log_service.h"
0019 
0020 // Virtual destructor implementation to pin vtable and typeinfo to this
0021 // translation unit
0022 ACTSGeo_service::~ACTSGeo_service() {};
0023 
0024 //----------------------------------------------------------------
0025 // detector
0026 //
0027 /// Return pointer to the dd4hep::Detector object.
0028 /// Call Initialize if needed.
0029 //----------------------------------------------------------------
0030 std::shared_ptr<const ActsGeometryProvider> ACTSGeo_service::actsGeoProvider() {
0031 
0032     try{
0033         std::call_once(m_init_flag, [this](){
0034             // Assemble everything on the first call
0035 
0036             if(!m_dd4hepGeo) {
0037                 throw JException("ACTSGeo_service m_dd4hepGeo==null which should never be!");
0038             }
0039 
0040             // Get material map from user parameter
0041             std::string material_map_file;
0042             try {
0043               material_map_file = m_dd4hepGeo->constant<std::string>("material-map");
0044             } catch (const std::runtime_error& e) {
0045               material_map_file = "calibrations/materials-map.cbor";
0046             }
0047             m_app->SetDefaultParameter("acts:MaterialMap", material_map_file, "JSON/CBOR material map file path");
0048 
0049             // Reading the geometry may take a long time and if the JANA ticker is enabled, it will keep printing
0050             // while no other output is coming which makes it look like something is wrong. Disable the ticker
0051             // while parsing and loading the geometry
0052             auto tickerEnabled = m_app->IsTickerEnabled();
0053             m_app->SetTicker(false);
0054 
0055             // Create default m_acts_provider
0056             m_acts_provider = std::make_shared<ActsGeometryProvider>();
0057 
0058             // Set ActsGeometryProvider parameters
0059             bool objWriteIt = m_acts_provider->getObjWriteIt();
0060             bool plyWriteIt = m_acts_provider->getPlyWriteIt();
0061             m_app->SetDefaultParameter("acts:WriteObj", objWriteIt, "Write tracking geometry as obj files");
0062             m_app->SetDefaultParameter("acts:WritePly", plyWriteIt, "Write tracking geometry as ply files");
0063             m_acts_provider->setObjWriteIt(objWriteIt);
0064             m_acts_provider->setPlyWriteIt(plyWriteIt);
0065 
0066             std::string outputTag = m_acts_provider->getOutputTag();
0067             std::string outputDir = m_acts_provider->getOutputDir();
0068             m_app->SetDefaultParameter("acts:OutputTag", outputTag, "Obj and ply output file tag");
0069             m_app->SetDefaultParameter("acts:OutputDir", outputDir, "Obj and ply output file dir");
0070             m_acts_provider->setOutputTag(outputTag);
0071             m_acts_provider->setOutputDir(outputDir);
0072 
0073             std::array<int,3> containerView = m_acts_provider->getContainerView().color;
0074             std::array<int,3> volumeView = m_acts_provider->getVolumeView().color;
0075             std::array<int,3> sensitiveView = m_acts_provider->getSensitiveView().color;
0076             std::array<int,3> passiveView = m_acts_provider->getPassiveView().color;
0077             std::array<int,3> gridView = m_acts_provider->getGridView().color;
0078             m_app->SetDefaultParameter("acts:ContainerView", containerView, "RGB for container views");
0079             m_app->SetDefaultParameter("acts:VolumeView", volumeView, "RGB for volume views");
0080             m_app->SetDefaultParameter("acts:SensitiveView", sensitiveView, "RGB for sensitive views");
0081             m_app->SetDefaultParameter("acts:PassiveView", passiveView, "RGB for passive views");
0082             m_app->SetDefaultParameter("acts:GridView", gridView, "RGB for grid views");
0083             m_acts_provider->setContainerView(containerView);
0084             m_acts_provider->setVolumeView(volumeView);
0085             m_acts_provider->setSensitiveView(sensitiveView);
0086             m_acts_provider->setPassiveView(passiveView);
0087             m_acts_provider->setGridView(gridView);
0088 
0089             // Initialize m_acts_provider
0090             m_acts_provider->initialize(m_dd4hepGeo, material_map_file, m_log, m_log);
0091 
0092             // Enable ticker back
0093             m_app->SetTicker(tickerEnabled);
0094         });
0095     }
0096     catch (std::exception &ex) {
0097         throw JException(ex.what());
0098     }
0099 
0100     return m_acts_provider;
0101 }
0102 
0103 
0104 
0105 void ACTSGeo_service::acquire_services(JServiceLocator * srv_locator) {
0106 
0107     auto log_service = srv_locator->get<Log_service>();
0108     m_log = log_service->logger("acts");
0109 
0110     // DD4Hep geometry
0111     auto dd4hep_service = srv_locator->get<DD4hep_service>();
0112     m_dd4hepGeo = dd4hep_service->detector();
0113 }