File indexing completed on 2024-04-06 12:05:29
0001 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0002 #include "FWCore/ParameterSet/interface/FileInPath.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004 #include "FWCore/Framework/interface/MakerMacros.h"
0005 #include "FWCore/Framework/interface/ESTransientHandle.h"
0006 #include "FWCore/Framework/interface/EventSetup.h"
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0009 #include "DetectorDescription/DDCMS/interface/DDDetector.h"
0010 #include "Geometry/Records/interface/DDVectorRegistryRcd.h"
0011 #include "DetectorDescription/DDCMS/interface/DDVectorRegistry.h"
0012 #include "DD4hep/Detector.h"
0013
0014 #include <memory>
0015 #include <string>
0016
0017 using namespace std;
0018 using namespace cms;
0019 using namespace edm;
0020 using namespace dd4hep;
0021
0022 class DDCMSDetector : public one::EDAnalyzer<> {
0023 public:
0024 explicit DDCMSDetector(const ParameterSet& p);
0025
0026 void beginJob() override {}
0027 void analyze(Event const& iEvent, EventSetup const&) override;
0028 void endJob() override;
0029
0030 private:
0031 const ESInputTag m_tag;
0032 const ESGetToken<DDDetector, IdealGeometryRecord> m_detectorToken;
0033 const ESGetToken<DDVectorRegistry, DDVectorRegistryRcd> m_registryToken;
0034 };
0035
0036 DDCMSDetector::DDCMSDetector(const ParameterSet& iConfig)
0037 : m_tag(iConfig.getParameter<ESInputTag>("DDDetector")),
0038 m_detectorToken(esConsumes(m_tag)),
0039 m_registryToken(esConsumes(m_tag)) {}
0040
0041 void DDCMSDetector::analyze(const Event&, const EventSetup& iEventSetup) {
0042 ESTransientHandle<DDDetector> det = iEventSetup.getTransientHandle(m_detectorToken);
0043
0044 LogVerbatim("Geometry") << "Iterate over the detectors:\n";
0045 LogVerbatim("Geometry").log([&](auto& log) {
0046 for (auto const& it : det->description()->detectors()) {
0047 dd4hep::DetElement det(it.second);
0048 log << it.first << ": " << det.path();
0049 }
0050 });
0051 LogVerbatim("Geometry") << "..done!";
0052
0053 ESTransientHandle<DDVectorRegistry> registry = iEventSetup.getTransientHandle(m_registryToken);
0054
0055 LogVerbatim("Geometry") << "DD Vector Registry size: " << registry->vectors.size();
0056 LogVerbatim("Geometry").log([&](auto& log) {
0057 for (const auto& p : registry->vectors) {
0058 log << " " << p.first << " => ";
0059 for (const auto& i : p.second)
0060 log << i << ", ";
0061 log << '\n';
0062 }
0063 });
0064 }
0065
0066 void DDCMSDetector::endJob() {}
0067
0068 DEFINE_FWK_MODULE(DDCMSDetector);