Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-31 02:19:58

0001 #include <memory>
0002 
0003 // user include files
0004 #include "FWCore/Framework/interface/ESHandle.h"
0005 #include "FWCore/Framework/interface/ESProducer.h"
0006 #include "FWCore/Framework/interface/ModuleFactory.h"
0007 #include "FWCore/Utilities/interface/ESInputTag.h"
0008 #include "FWCore/Utilities/interface/Visibility.h"
0009 #include "NavigationSchoolFactory.h"
0010 #include "RecoTracker/Record/interface/NavigationSchoolRecord.h"
0011 
0012 //
0013 // class decleration
0014 //
0015 
0016 class dso_hidden NavigationSchoolESProducer final : public edm::ESProducer {
0017 public:
0018   NavigationSchoolESProducer(const edm::ParameterSet&);
0019 
0020   typedef std::unique_ptr<NavigationSchool> ReturnType;
0021 
0022   virtual ReturnType produce(const NavigationSchoolRecord&);
0023 
0024   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0025 
0026 private:
0027   // ----------member data ---------------------------
0028   edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magFieldToken_;
0029   edm::ESGetToken<GeometricSearchTracker, TrackerRecoGeometryRecord> geometricSearchTrackerToken_;
0030   const std::string navigationSchoolName_;
0031   std::string navigationSchoolPluginName_;
0032 };
0033 
0034 //
0035 //
0036 // constructors and destructor
0037 //
0038 NavigationSchoolESProducer::NavigationSchoolESProducer(const edm::ParameterSet& iConfig)
0039     : navigationSchoolName_(iConfig.getParameter<std::string>("ComponentName")),
0040       navigationSchoolPluginName_(iConfig.getParameter<std::string>("PluginName")) {
0041   //the following line is needed to tell the framework what
0042   // data is being produced
0043   auto cc = setWhatProduced(this, navigationSchoolName_);
0044   magFieldToken_ = cc.consumes(edm::ESInputTag("", iConfig.getParameter<std::string>("SimpleMagneticField")));
0045   geometricSearchTrackerToken_ = cc.consumes();
0046 
0047   //now do what ever other initialization is needed
0048   if (navigationSchoolPluginName_.empty())
0049     navigationSchoolPluginName_ = navigationSchoolName_;
0050 }
0051 
0052 //
0053 // member functions
0054 //
0055 
0056 // ------------ method called to produce the data  ------------
0057 NavigationSchoolESProducer::ReturnType NavigationSchoolESProducer::produce(const NavigationSchoolRecord& iRecord) {
0058   using namespace edm::es;
0059 
0060   //get the geometricsearch tracker geometry
0061   return ReturnType(NavigationSchoolFactory::get()->create(
0062       navigationSchoolPluginName_, &iRecord.get(geometricSearchTrackerToken_), &iRecord.get(magFieldToken_)));
0063 }
0064 
0065 void NavigationSchoolESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0066   edm::ParameterSetDescription desc;
0067   desc.add<std::string>("ComponentName", "");
0068   desc.add<std::string>("PluginName", "");
0069   desc.add<std::string>("SimpleMagneticField", "");
0070   descriptions.addWithDefaultLabel(desc);
0071 }
0072 
0073 #include "FWCore/PluginManager/interface/ModuleDef.h"
0074 #include "FWCore/Framework/interface/MakerMacros.h"
0075 DEFINE_FWK_EVENTSETUP_MODULE(NavigationSchoolESProducer);