File indexing completed on 2024-04-06 12:15:29
0001 #include "FWCore/Framework/interface/ESProducer.h"
0002 #include "FWCore/Framework/interface/EventSetup.h"
0003 #include "FWCore/Framework/interface/ESTransientHandle.h"
0004 #include "FWCore/Framework/interface/ModuleFactory.h"
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0008 #include "DetectorDescription/Core/interface/DDCompactView.h"
0009 #include "DetectorDescription/Core/interface/DDutils.h"
0010 #include "DetectorDescription/DDCMS/interface/DDCompactView.h"
0011 #include "Geometry/TrackerNumberingBuilder/plugins/DDDCmsTrackerContruction.h"
0012 #include "Geometry/TrackerNumberingBuilder/plugins/CondDBCmsTrackerConstruction.h"
0013 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0014 #include "CondFormats/GeometryObjects/interface/PGeometricDet.h"
0015
0016 #include <memory>
0017
0018 class TrackerGeometricDetESModule : public edm::ESProducer {
0019 public:
0020 TrackerGeometricDetESModule(const edm::ParameterSet& p);
0021 ~TrackerGeometricDetESModule(void) override;
0022 std::unique_ptr<GeometricDet> produce(const IdealGeometryRecord&);
0023
0024 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0025
0026 private:
0027 edm::ESGetToken<DDCompactView, IdealGeometryRecord> ddToken_;
0028 edm::ESGetToken<cms::DDCompactView, IdealGeometryRecord> dd4hepToken_;
0029 edm::ESGetToken<PGeometricDet, IdealGeometryRecord> pgToken_;
0030 bool fromDDD_;
0031 bool fromDD4hep_;
0032 };
0033
0034 using namespace edm;
0035
0036 TrackerGeometricDetESModule::TrackerGeometricDetESModule(const edm::ParameterSet& p)
0037 : fromDDD_(p.getParameter<bool>("fromDDD")), fromDD4hep_(p.getParameter<bool>("fromDD4hep")) {
0038 edm::LogVerbatim("TrackerGeom") << "TrackerGeometricDetESModule::fromDDD " << fromDDD_ << " fromDD4hep "
0039 << fromDD4hep_;
0040 auto cc = setWhatProduced(this);
0041 if (fromDDD_) {
0042 ddToken_ = cc.consumes<DDCompactView>(edm::ESInputTag());
0043 } else if (fromDD4hep_) {
0044 dd4hepToken_ = cc.consumes<cms::DDCompactView>(edm::ESInputTag());
0045 } else {
0046 pgToken_ = cc.consumes<PGeometricDet>(edm::ESInputTag());
0047 }
0048 }
0049
0050 TrackerGeometricDetESModule::~TrackerGeometricDetESModule(void) {}
0051
0052 void TrackerGeometricDetESModule::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0053 edm::ParameterSetDescription descDB;
0054 descDB.add<bool>("fromDDD", false);
0055 descDB.add<bool>("fromDD4hep", false);
0056 descriptions.add("trackerNumberingGeometryDB", descDB);
0057
0058 edm::ParameterSetDescription desc;
0059 desc.add<bool>("fromDDD", true);
0060 desc.add<bool>("fromDD4hep", false);
0061 descriptions.add("trackerNumberingGeometry", desc);
0062
0063 edm::ParameterSetDescription descDD4hep;
0064 descDD4hep.add<bool>("fromDDD", false);
0065 descDD4hep.add<bool>("fromDD4hep", true);
0066 descriptions.add("DD4hep_trackerNumberingGeometry", descDD4hep);
0067 }
0068
0069 std::unique_ptr<GeometricDet> TrackerGeometricDetESModule::produce(const IdealGeometryRecord& iRecord) {
0070 if (fromDDD_) {
0071 edm::ESTransientHandle<DDCompactView> cpv = iRecord.getTransientHandle(ddToken_);
0072
0073 return DDDCmsTrackerContruction::construct(*cpv, dbl_to_int(cpv->vector("detIdShifts")));
0074 } else if (fromDD4hep_) {
0075 edm::ESTransientHandle<cms::DDCompactView> cpv = iRecord.getTransientHandle(dd4hepToken_);
0076
0077 return DDDCmsTrackerContruction::construct(*cpv, cpv->getVector<int>("detIdShifts"));
0078 } else {
0079 auto const& pgd = iRecord.get(pgToken_);
0080
0081 return CondDBCmsTrackerConstruction::construct(pgd);
0082 }
0083 }
0084
0085 DEFINE_FWK_EVENTSETUP_MODULE(TrackerGeometricDetESModule);