Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // get the MTD if it is available
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   // if we've got MTD initialize it
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);