File indexing completed on 2025-01-31 02:20:02
0001 #include <memory>
0002 #include <string>
0003
0004 #include "FWCore/Framework/interface/ESHandle.h"
0005 #include "FWCore/Framework/interface/ESProducer.h"
0006 #include "FWCore/Framework/interface/EventSetup.h"
0007 #include "FWCore/Framework/interface/ModuleFactory.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0009 #include "TrackingTools/RecoGeometry/interface/GlobalDetLayerGeometry.h"
0010 #include "TrackingTools/RecoGeometry/interface/RecoGeometryRecord.h"
0011
0012 class GlobalDetLayerGeometryESProducer : public edm::ESProducer {
0013 public:
0014 GlobalDetLayerGeometryESProducer(const edm::ParameterSet& p);
0015 ~GlobalDetLayerGeometryESProducer() override = default;
0016 std::unique_ptr<DetLayerGeometry> produce(const RecoGeometryRecord&);
0017 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0018
0019 private:
0020 edm::ESGetToken<GeometricSearchTracker, TrackerRecoGeometryRecord> trackerToken_;
0021 edm::ESGetToken<MuonDetLayerGeometry, MuonRecoGeometryRecord> muonToken_;
0022 edm::ESGetToken<MTDDetLayerGeometry, MTDRecoGeometryRecord> mtdToken_;
0023 };
0024
0025 using namespace edm;
0026
0027 GlobalDetLayerGeometryESProducer::GlobalDetLayerGeometryESProducer(const edm::ParameterSet& p) {
0028 std::string myName = p.getParameter<std::string>("ComponentName");
0029 auto cc = setWhatProduced(this, myName);
0030 trackerToken_ = cc.consumes();
0031 muonToken_ = cc.consumes();
0032 mtdToken_ = cc.consumes();
0033 }
0034
0035 void GlobalDetLayerGeometryESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0036 edm::ParameterSetDescription desc;
0037 desc.add<std::string>("ComponentName", std::string(""));
0038 descriptions.addWithDefaultLabel(desc);
0039 }
0040
0041 std::unique_ptr<DetLayerGeometry> GlobalDetLayerGeometryESProducer::produce(const RecoGeometryRecord& iRecord) {
0042 auto const& tracker = iRecord.get(trackerToken_);
0043 auto const& muon = iRecord.get(muonToken_);
0044 edm::ESHandle<MTDDetLayerGeometry> mtd;
0045
0046
0047 if (auto mtdRecord = iRecord.tryToGetRecord<MTDRecoGeometryRecord>()) {
0048 mtd = mtdRecord->getHandle(mtdToken_);
0049 if (!mtd.isValid()) {
0050 LogInfo("GlobalDetLayergGeometryBuilder") << "No MTD geometry is available.";
0051 }
0052 } else {
0053 LogInfo("GlobalDetLayerGeometryBuilder") << "No MTDRecoGeometryRecord is available.";
0054 }
0055
0056
0057 if (mtd.isValid())
0058 return std::make_unique<GlobalDetLayerGeometry>(&tracker, &muon, mtd.product());
0059
0060 return std::make_unique<GlobalDetLayerGeometry>(&tracker, &muon);
0061 }
0062
0063 DEFINE_FWK_EVENTSETUP_MODULE(GlobalDetLayerGeometryESProducer);