diff --git a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.cc b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.cc index 53627617a0303..2170bab0c296c 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.cc +++ b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.cc @@ -93,6 +93,11 @@ MillePedeAlignmentAlgorithm::MillePedeAlignmentAlgorithm(const edm::ParameterSet theDir(theConfig.getUntrackedParameter("fileDir")), theAlignmentParameterStore(nullptr), theAlignables(), + theTrajectoryFactory( + TrajectoryFactoryPlugin::get()->create(theConfig.getParameter("TrajectoryFactory") + .getParameter("TrajectoryFactoryName"), + theConfig.getParameter("TrajectoryFactory"), + iC)), theMinNumHits(cfg.getParameter("minNumHits")), theMaximalCor2D(cfg.getParameter("max2Dcorrelation")), firstIOV_(cfg.getUntrackedParameter("firstIOV")), @@ -273,9 +278,6 @@ void MillePedeAlignmentAlgorithm::initialize(const edm::EventSetup &setup, theMonitor = std::make_unique(tTopo, (theDir + moniFile).c_str()); // Get trajectory factory. In case nothing found, FrameWork will throw... - const edm::ParameterSet fctCfg(theConfig.getParameter("TrajectoryFactory")); - const std::string fctName(fctCfg.getParameter("TrajectoryFactoryName")); - theTrajectoryFactory = TrajectoryFactoryPlugin::get()->create(fctName, fctCfg); } if (this->isMode(myPedeSteerBit)) { diff --git a/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h b/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h index 191d29d92726c..54ffd052b2aa5 100644 --- a/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h +++ b/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h @@ -10,6 +10,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" /// Base class for factories producing reference trajectories, i.e. instances of classes deriving from /// ReferenceTrajectoryBase, from a TrajTrackPairCollection. @@ -27,8 +28,10 @@ class TrajectoryFactoryBase { typedef std::pair TrajectoryInput; typedef std::vector ExternalPredictionCollection; - TrajectoryFactoryBase(const edm::ParameterSet& config); - TrajectoryFactoryBase(const edm::ParameterSet& config, unsigned int tracksPerTrajectory); + TrajectoryFactoryBase(const edm::ParameterSet& config, const edm::ConsumesCollector& iC); + TrajectoryFactoryBase(const edm::ParameterSet& config, + unsigned int tracksPerTrajectory, + const edm::ConsumesCollector& iC); virtual ~TrajectoryFactoryBase(void); virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup& setup, diff --git a/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryPlugin.h b/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryPlugin.h index 4ce8bfa38c038..3288e6f56d58c 100644 --- a/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryPlugin.h +++ b/Alignment/ReferenceTrajectories/interface/TrajectoryFactoryPlugin.h @@ -8,6 +8,7 @@ /// A PluginFactory that produces factories that inherit from TrajectoryFactoryBase. -typedef edmplugin::PluginFactory TrajectoryFactoryPlugin; +typedef edmplugin::PluginFactory + TrajectoryFactoryPlugin; #endif diff --git a/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.cc b/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.cc index b237810c4fe90..2000da10c8962 100644 --- a/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.cc +++ b/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.cc @@ -20,8 +20,10 @@ ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// -BzeroReferenceTrajectoryFactory::BzeroReferenceTrajectoryFactory(const edm::ParameterSet &config) - : TrajectoryFactoryBase(config), +BzeroReferenceTrajectoryFactory::BzeroReferenceTrajectoryFactory(const edm::ParameterSet &config, + edm::ConsumesCollector &iC) + : TrajectoryFactoryBase(config, iC), + m_MagFieldToken(iC.esConsumes()), theMass(config.getParameter("ParticleMass")), theMomentumEstimate(config.getParameter("MomentumEstimate")) { edm::LogInfo("Alignment") << "@SUB=BzeroReferenceTrajectoryFactory" @@ -35,8 +37,7 @@ const BzeroReferenceTrajectoryFactory::ReferenceTrajectoryCollection BzeroRefere const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const { ReferenceTrajectoryCollection trajectories; - edm::ESHandle magneticField; - setup.get().get(magneticField); + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); @@ -51,7 +52,7 @@ const BzeroReferenceTrajectoryFactory::ReferenceTrajectoryCollection BzeroRefere // set the flag for reversing the RecHits to false, since they are already in the correct order. config.hitsAreReverse = false; trajectories.push_back(ReferenceTrajectoryPtr( - new BzeroReferenceTrajectory(input.first, input.second, magneticField.product(), beamSpot, config))); + new BzeroReferenceTrajectory(input.first, input.second, magneticField, beamSpot, config))); } ++itTracks; @@ -76,8 +77,7 @@ const BzeroReferenceTrajectoryFactory::ReferenceTrajectoryCollection BzeroRefere return trajectories; } - edm::ESHandle magneticField; - setup.get().get(magneticField); + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); ExternalPredictionCollection::const_iterator itExternal = external.begin(); @@ -94,7 +94,7 @@ const BzeroReferenceTrajectoryFactory::ReferenceTrajectoryCollection BzeroRefere // set the flag for reversing the RecHits to false, since they are already in the correct order. config.hitsAreReverse = false; ReferenceTrajectoryPtr refTraj( - new BzeroReferenceTrajectory(*itExternal, input.second, magneticField.product(), beamSpot, config)); + new BzeroReferenceTrajectory(*itExternal, input.second, magneticField, beamSpot, config)); AlgebraicSymMatrix externalParamErrors(asHepMatrix<5>((*itExternal).localError().matrix())); refTraj->setParameterErrors(externalParamErrors.sub(2, 5)); @@ -108,7 +108,7 @@ const BzeroReferenceTrajectoryFactory::ReferenceTrajectoryCollection BzeroRefere // set the flag for reversing the RecHits to false, since they are already in the correct order. config.hitsAreReverse = false; trajectories.push_back(ReferenceTrajectoryPtr( - new BzeroReferenceTrajectory(input.first, input.second, magneticField.product(), beamSpot, config))); + new BzeroReferenceTrajectory(input.first, input.second, magneticField, beamSpot, config))); } } diff --git a/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.h b/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.h index eba346053f071..a64abf0260df4 100644 --- a/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.h +++ b/Alignment/ReferenceTrajectories/plugins/BzeroReferenceTrajectoryFactory.h @@ -1,4 +1,5 @@ #include "Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h" +#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" namespace edm { class ParameterSet; @@ -13,9 +14,8 @@ namespace reco { class BzeroReferenceTrajectoryFactory : public TrajectoryFactoryBase { public: - BzeroReferenceTrajectoryFactory(const edm::ParameterSet &config); + BzeroReferenceTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC); ~BzeroReferenceTrajectoryFactory() override; - /// Produce the reference trajectories. const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, @@ -28,6 +28,8 @@ class BzeroReferenceTrajectoryFactory : public TrajectoryFactoryBase { BzeroReferenceTrajectoryFactory *clone() const override { return new BzeroReferenceTrajectoryFactory(*this); } + const edm::ESGetToken m_MagFieldToken; + private: double theMass; double theMomentumEstimate; diff --git a/Alignment/ReferenceTrajectories/plugins/CombinedTrajectoryFactory.cc b/Alignment/ReferenceTrajectories/plugins/CombinedTrajectoryFactory.cc index 91d9adee5c7af..699678cbb5460 100644 --- a/Alignment/ReferenceTrajectories/plugins/CombinedTrajectoryFactory.cc +++ b/Alignment/ReferenceTrajectories/plugins/CombinedTrajectoryFactory.cc @@ -23,7 +23,7 @@ class CombinedTrajectoryFactory : public TrajectoryFactoryBase { public: - CombinedTrajectoryFactory(const edm::ParameterSet &config); + CombinedTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC); ~CombinedTrajectoryFactory() override; const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, @@ -56,8 +56,8 @@ class CombinedTrajectoryFactory : public TrajectoryFactoryBase { using namespace std; -CombinedTrajectoryFactory::CombinedTrajectoryFactory(const edm::ParameterSet &config) - : TrajectoryFactoryBase(config), theUseAllFactories(config.getParameter("useAllFactories")) { +CombinedTrajectoryFactory::CombinedTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC) + : TrajectoryFactoryBase(config, iC), theUseAllFactories(config.getParameter("useAllFactories")) { vector factoryNames = config.getParameter>("TrajectoryFactoryNames"); for (auto const &factoryName : factoryNames) { // auto_ptr to avoid missing a delete due to throw... @@ -68,7 +68,7 @@ CombinedTrajectoryFactory::CombinedTrajectoryFactory(const edm::ParameterSet &co << "separated strings, but is '" << factoryName << "'"; } const edm::ParameterSet factoryCfg = config.getParameter(namePset->At(1)->GetName()); - theFactories.emplace_back(TrajectoryFactoryPlugin::get()->create(namePset->At(0)->GetName(), factoryCfg)); + theFactories.emplace_back(TrajectoryFactoryPlugin::get()->create(namePset->At(0)->GetName(), factoryCfg, iC)); } } diff --git a/Alignment/ReferenceTrajectories/plugins/DualBzeroTrajectoryFactory.cc b/Alignment/ReferenceTrajectories/plugins/DualBzeroTrajectoryFactory.cc index 81918c252ed86..b2ab00fb83bab 100644 --- a/Alignment/ReferenceTrajectories/plugins/DualBzeroTrajectoryFactory.cc +++ b/Alignment/ReferenceTrajectories/plugins/DualBzeroTrajectoryFactory.cc @@ -16,8 +16,9 @@ class DualBzeroTrajectoryFactory : public TrajectoryFactoryBase { public: - DualBzeroTrajectoryFactory(const edm::ParameterSet &config); + DualBzeroTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC); ~DualBzeroTrajectoryFactory() override; + const edm::ESGetToken m_MagFieldToken; /// Produce the reference trajectories. const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, @@ -52,8 +53,8 @@ class DualBzeroTrajectoryFactory : public TrajectoryFactoryBase { //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -DualBzeroTrajectoryFactory::DualBzeroTrajectoryFactory(const edm::ParameterSet &config) - : TrajectoryFactoryBase(config) { +DualBzeroTrajectoryFactory::DualBzeroTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC) + : TrajectoryFactoryBase(config, iC), m_MagFieldToken(iC.esConsumes()) { theMass = config.getParameter("ParticleMass"); theMomentumEstimate = config.getParameter("MomentumEstimate"); } @@ -64,8 +65,7 @@ const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTraject const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const { ReferenceTrajectoryCollection trajectories; - edm::ESHandle magneticField; - setup.get().get(magneticField); + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); @@ -78,7 +78,7 @@ const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTraject config.includeAPEs = includeAPEs_; config.allowZeroMaterial = allowZeroMaterial_; ReferenceTrajectoryPtr ptr(new DualBzeroReferenceTrajectory( - input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField.product(), beamSpot, config)); + input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField, beamSpot, config)); trajectories.push_back(ptr); } @@ -103,8 +103,7 @@ const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTraject return trajectories; } - edm::ESHandle magneticField; - setup.get().get(magneticField); + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin(); ExternalPredictionCollection::const_iterator itExternal = external.begin(); @@ -114,8 +113,7 @@ const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTraject // Check input: If all hits were rejected, the TSOS is initialized as invalid. if (input.refTsos.isValid()) { if ((*itExternal).isValid()) { - TrajectoryStateOnSurface propExternal = - propagateExternal(*itExternal, input.refTsos.surface(), magneticField.product()); + TrajectoryStateOnSurface propExternal = propagateExternal(*itExternal, input.refTsos.surface(), magneticField); if (!propExternal.isValid()) continue; @@ -125,7 +123,7 @@ const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTraject config.includeAPEs = includeAPEs_; config.allowZeroMaterial = allowZeroMaterial_; ReferenceTrajectoryPtr ptr(new DualBzeroReferenceTrajectory( - propExternal, input.fwdRecHits, input.bwdRecHits, magneticField.product(), beamSpot, config)); + propExternal, input.fwdRecHits, input.bwdRecHits, magneticField, beamSpot, config)); AlgebraicSymMatrix externalParamErrors(asHepMatrix<5>(propExternal.localError().matrix())); ptr->setParameterErrors(externalParamErrors.sub(2, 5)); @@ -136,7 +134,7 @@ const DualBzeroTrajectoryFactory::ReferenceTrajectoryCollection DualBzeroTraject config.includeAPEs = includeAPEs_; config.allowZeroMaterial = allowZeroMaterial_; ReferenceTrajectoryPtr ptr(new DualBzeroReferenceTrajectory( - input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField.product(), beamSpot, config)); + input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField, beamSpot, config)); trajectories.push_back(ptr); } diff --git a/Alignment/ReferenceTrajectories/plugins/DualTrajectoryFactory.cc b/Alignment/ReferenceTrajectories/plugins/DualTrajectoryFactory.cc index d4fd9a4cf3ab1..447152cd28f79 100644 --- a/Alignment/ReferenceTrajectories/plugins/DualTrajectoryFactory.cc +++ b/Alignment/ReferenceTrajectories/plugins/DualTrajectoryFactory.cc @@ -16,8 +16,9 @@ class DualTrajectoryFactory : public TrajectoryFactoryBase { public: - DualTrajectoryFactory(const edm::ParameterSet &config); + DualTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC); ~DualTrajectoryFactory() override; + const edm::ESGetToken m_MagFieldToken; /// Produce the reference trajectories. const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, @@ -51,8 +52,10 @@ class DualTrajectoryFactory : public TrajectoryFactoryBase { //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -DualTrajectoryFactory::DualTrajectoryFactory(const edm::ParameterSet &config) - : TrajectoryFactoryBase(config), theMass(config.getParameter("ParticleMass")) { +DualTrajectoryFactory::DualTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC) + : TrajectoryFactoryBase(config, iC), + m_MagFieldToken(iC.esConsumes()), + theMass(config.getParameter("ParticleMass")) { edm::LogInfo("Alignment") << "@SUB=DualTrajectoryFactory" << "mass: " << theMass; } @@ -63,8 +66,8 @@ const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const { ReferenceTrajectoryCollection trajectories; - edm::ESHandle magneticField; - setup.get().get(magneticField); + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); + if (magneticField->inTesla(GlobalPoint(0., 0., 0.)).mag2() < 1.e-6) { edm::LogWarning("Alignment") << "@SUB=DualTrajectoryFactory::trajectories" << "B-field in z is " << magneticField->inTesla(GlobalPoint(0., 0., 0.)).z() @@ -83,7 +86,7 @@ const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory config.includeAPEs = includeAPEs_; config.allowZeroMaterial = allowZeroMaterial_; ReferenceTrajectoryPtr ptr(new DualReferenceTrajectory( - input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField.product(), beamSpot, config)); + input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField, beamSpot, config)); trajectories.push_back(ptr); } @@ -107,9 +110,8 @@ const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory << "\tnumber of tracks = " << tracks.size() << "\tnumber of external predictions = " << external.size(); return trajectories; } + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); - edm::ESHandle magneticField; - setup.get().get(magneticField); if (magneticField->inTesla(GlobalPoint(0., 0., 0.)).mag2() < 1.e-6) { edm::LogWarning("Alignment") << "@SUB=DualTrajectoryFactory::trajectories" << "B-field in z is " << magneticField->inTesla(GlobalPoint(0., 0., 0.)).z() @@ -125,8 +127,7 @@ const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory // Check input: If all hits were rejected, the TSOS is initialized as invalid. if (input.refTsos.isValid()) { if ((*itExternal).isValid()) { - TrajectoryStateOnSurface propExternal = - propagateExternal(*itExternal, input.refTsos.surface(), magneticField.product()); + TrajectoryStateOnSurface propExternal = propagateExternal(*itExternal, input.refTsos.surface(), magneticField); if (!propExternal.isValid()) continue; @@ -136,7 +137,7 @@ const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory config.includeAPEs = includeAPEs_; config.allowZeroMaterial = allowZeroMaterial_; ReferenceTrajectoryPtr ptr(new DualReferenceTrajectory( - propExternal, input.fwdRecHits, input.bwdRecHits, magneticField.product(), beamSpot, config)); + propExternal, input.fwdRecHits, input.bwdRecHits, magneticField, beamSpot, config)); AlgebraicSymMatrix externalParamErrors(asHepMatrix<5>(propExternal.localError().matrix())); ptr->setParameterErrors(externalParamErrors); @@ -147,7 +148,7 @@ const DualTrajectoryFactory::ReferenceTrajectoryCollection DualTrajectoryFactory config.includeAPEs = includeAPEs_; config.allowZeroMaterial = allowZeroMaterial_; ReferenceTrajectoryPtr ptr(new DualReferenceTrajectory( - input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField.product(), beamSpot, config)); + input.refTsos, input.fwdRecHits, input.bwdRecHits, magneticField, beamSpot, config)); trajectories.push_back(ptr); } } diff --git a/Alignment/ReferenceTrajectories/plugins/ReferenceTrajectoryFactory.cc b/Alignment/ReferenceTrajectories/plugins/ReferenceTrajectoryFactory.cc index d592a39ce8e00..9e1fa615728ad 100644 --- a/Alignment/ReferenceTrajectories/plugins/ReferenceTrajectoryFactory.cc +++ b/Alignment/ReferenceTrajectories/plugins/ReferenceTrajectoryFactory.cc @@ -19,8 +19,9 @@ class ReferenceTrajectoryFactory : public TrajectoryFactoryBase { public: - ReferenceTrajectoryFactory(const edm::ParameterSet &config); + ReferenceTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC); ~ReferenceTrajectoryFactory() override; + const edm::ESGetToken m_MagFieldToken; /// Produce the reference trajectories. const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, @@ -37,9 +38,11 @@ class ReferenceTrajectoryFactory : public TrajectoryFactoryBase { protected: ReferenceTrajectoryFactory(const ReferenceTrajectoryFactory &other); const TrajectoryFactoryBase *bzeroFactory() const; + const TrajectoryFactoryBase *bzeroFactory(edm::ConsumesCollector &iC) const; double theMass; bool theUseBzeroIfFieldOff; + //edm::ParameterSet pset; mutable const TrajectoryFactoryBase *theBzeroFactory; }; @@ -47,14 +50,25 @@ class ReferenceTrajectoryFactory : public TrajectoryFactoryBase { //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -ReferenceTrajectoryFactory::ReferenceTrajectoryFactory(const edm::ParameterSet &config) - : TrajectoryFactoryBase(config), +ReferenceTrajectoryFactory::ReferenceTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC) + : TrajectoryFactoryBase(config, iC), + m_MagFieldToken(iC.esConsumes()), theMass(config.getParameter("ParticleMass")), theUseBzeroIfFieldOff(config.getParameter("UseBzeroIfFieldOff")), theBzeroFactory(nullptr) { edm::LogInfo("Alignment") << "@SUB=ReferenceTrajectoryFactory" << "mass: " << theMass << "\nusing Bzero if |B| = 0: " << (theUseBzeroIfFieldOff ? "yes" : "no"); + // We take the config of this factory, copy it, replace its name and add + // the momentum parameter as expected by BzeroReferenceTrajectoryFactory and create it: + // + edm::ParameterSet pset; + pset.copyForModify(config); + // next two lines not needed, but may help to better understand log file: + pset.eraseSimpleParameter("TrajectoryFactoryName"); + pset.addParameter("TrajectoryFactoryName", std::string("BzeroReferenceTrajectoryFactory")); + pset.addParameter("MomentumEstimate", config.getParameter("MomentumEstimateFieldOff")); + theBzeroFactory = new BzeroReferenceTrajectoryFactory(pset, iC); } ReferenceTrajectoryFactory::ReferenceTrajectoryFactory(const ReferenceTrajectoryFactory &other) @@ -68,8 +82,8 @@ ReferenceTrajectoryFactory::~ReferenceTrajectoryFactory(void) { delete theBzeroF const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection ReferenceTrajectoryFactory::trajectories( const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const { - edm::ESHandle magneticField; - setup.get().get(magneticField); + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); + if (theUseBzeroIfFieldOff && magneticField->inTesla(GlobalPoint(0., 0., 0.)).mag2() < 1.e-6) { return this->bzeroFactory()->trajectories(setup, tracks, beamSpot); } @@ -89,8 +103,8 @@ const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection ReferenceTraject config.allowZeroMaterial = allowZeroMaterial_; // set the flag for reversing the RecHits to false, since they are already in the correct order. config.hitsAreReverse = false; - trajectories.push_back(ReferenceTrajectoryPtr( - new ReferenceTrajectory(input.first, input.second, magneticField.product(), beamSpot, config))); + trajectories.push_back( + ReferenceTrajectoryPtr(new ReferenceTrajectory(input.first, input.second, magneticField, beamSpot, config))); } ++itTracks; @@ -113,9 +127,8 @@ const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection ReferenceTraject << "\tnumber of tracks = " << tracks.size() << "\tnumber of external predictions = " << external.size(); return trajectories; } + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); - edm::ESHandle magneticField; - setup.get().get(magneticField); if (theUseBzeroIfFieldOff && magneticField->inTesla(GlobalPoint(0., 0., 0.)).mag2() < 1.e-6) { return this->bzeroFactory()->trajectories(setup, tracks, external, beamSpot); } @@ -135,7 +148,7 @@ const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection ReferenceTraject // set the flag for reversing the RecHits to false, since they are already in the correct order. config.hitsAreReverse = false; ReferenceTrajectoryPtr refTraj( - new ReferenceTrajectory(*itExternal, input.second, magneticField.product(), beamSpot, config)); + new ReferenceTrajectory(*itExternal, input.second, magneticField, beamSpot, config)); AlgebraicSymMatrix externalParamErrors(asHepMatrix<5>((*itExternal).localError().matrix())); refTraj->setParameterErrors(externalParamErrors); @@ -147,7 +160,7 @@ const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection ReferenceTraject config.allowZeroMaterial = allowZeroMaterial_; config.hitsAreReverse = false; trajectories.push_back(ReferenceTrajectoryPtr( - new ReferenceTrajectory(input.first, input.second, magneticField.product(), beamSpot, config))); + new ReferenceTrajectory(input.first, input.second, magneticField, beamSpot, config))); } } @@ -160,18 +173,8 @@ const ReferenceTrajectoryFactory::ReferenceTrajectoryCollection ReferenceTraject const TrajectoryFactoryBase *ReferenceTrajectoryFactory::bzeroFactory() const { if (!theBzeroFactory) { - const edm::ParameterSet &myPset = this->configuration(); edm::LogInfo("Alignment") << "@SUB=ReferenceTrajectoryFactory::bzeroFactory" << "Using BzeroReferenceTrajectoryFactory for some (all?) events."; - // We take the config of this factory, copy it, replace its name and add - // the momentum parameter as expected by BzeroReferenceTrajectoryFactory and create it: - edm::ParameterSet pset; - pset.copyForModify(myPset); - // next two lines not needed, but may help to better understand log file: - pset.eraseSimpleParameter("TrajectoryFactoryName"); - pset.addParameter("TrajectoryFactoryName", std::string("BzeroReferenceTrajectoryFactory")); - pset.addParameter("MomentumEstimate", myPset.getParameter("MomentumEstimateFieldOff")); - theBzeroFactory = new BzeroReferenceTrajectoryFactory(pset); } return theBzeroFactory; } diff --git a/Alignment/ReferenceTrajectories/plugins/TwoBodyDecayTrajectoryFactory.cc b/Alignment/ReferenceTrajectories/plugins/TwoBodyDecayTrajectoryFactory.cc index d7404d2074498..24c8bfaed960e 100644 --- a/Alignment/ReferenceTrajectories/plugins/TwoBodyDecayTrajectoryFactory.cc +++ b/Alignment/ReferenceTrajectories/plugins/TwoBodyDecayTrajectoryFactory.cc @@ -31,8 +31,10 @@ class TwoBodyDecayTrajectoryFactory : public TrajectoryFactoryBase { typedef TwoBodyDecayTrajectoryState::TsosContainer TsosContainer; typedef TwoBodyDecayTrajectory::ConstRecHitCollection ConstRecHitCollection; - TwoBodyDecayTrajectoryFactory(const edm::ParameterSet &config); + TwoBodyDecayTrajectoryFactory(const edm::ParameterSet &config, edm::ConsumesCollector &iC); ~TwoBodyDecayTrajectoryFactory() override; + const edm::ESGetToken m_MagFieldToken; + const edm::ESGetToken m_globTackingToken; /// Produce the trajectories. const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, @@ -71,8 +73,12 @@ class TwoBodyDecayTrajectoryFactory : public TrajectoryFactoryBase { //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -TwoBodyDecayTrajectoryFactory::TwoBodyDecayTrajectoryFactory(const edm::ParameterSet &config) - : TrajectoryFactoryBase(config, 2), theFitter(config) { +TwoBodyDecayTrajectoryFactory::TwoBodyDecayTrajectoryFactory(const edm::ParameterSet &config, + edm::ConsumesCollector &iC) + : TrajectoryFactoryBase(config, 2, iC), + m_MagFieldToken(iC.esConsumes()), + m_globTackingToken(iC.esConsumes()), + theFitter(config) { const edm::ParameterSet ppc = config.getParameter("ParticleProperties"); thePrimaryMass = ppc.getParameter("PrimaryMass"); thePrimaryWidth = ppc.getParameter("PrimaryWidth"); @@ -90,20 +96,16 @@ const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajector const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const { ReferenceTrajectoryCollection trajectories; - edm::ESHandle magneticField; - setup.get().get(magneticField); - - edm::ESHandle trackingGeometry; - setup.get().get(trackingGeometry); - + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); + const GlobalTrackingGeometry *trackingGeometry = &setup.getData(m_globTackingToken); if (tracks.size() == 2) { // produce transient tracks from persistent tracks std::vector transientTracks(2); - transientTracks[0] = reco::TransientTrack(*tracks[0].second, magneticField.product()); + transientTracks[0] = reco::TransientTrack(*tracks[0].second, magneticField); transientTracks[0].setTrackingGeometry(trackingGeometry); - transientTracks[1] = reco::TransientTrack(*tracks[1].second, magneticField.product()); + transientTracks[1] = reco::TransientTrack(*tracks[1].second, magneticField); transientTracks[1].setTrackingGeometry(trackingGeometry); // estimate the decay parameters @@ -115,7 +117,7 @@ const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajector return trajectories; } - return constructTrajectories(tracks, tbd, magneticField.product(), beamSpot, false); + return constructTrajectories(tracks, tbd, magneticField, beamSpot, false); } else { edm::LogInfo("ReferenceTrajectories") << "@SUB=TwoBodyDecayTrajectoryFactory::trajectories" << "Need 2 tracks, got " << tracks.size() << ".\n"; @@ -131,11 +133,9 @@ const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajector const reco::BeamSpot &beamSpot) const { ReferenceTrajectoryCollection trajectories; - edm::ESHandle magneticField; - setup.get().get(magneticField); + const MagneticField *magneticField = &setup.getData(m_MagFieldToken); - edm::ESHandle trackingGeometry; - setup.get().get(trackingGeometry); + const GlobalTrackingGeometry *trackingGeometry = &setup.getData(m_globTackingToken); if (tracks.size() == 2 && external.size() == 2) { if (external[0].isValid() && external[1].isValid()) // Include external estimates @@ -143,10 +143,10 @@ const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajector // produce transient tracks from persistent tracks std::vector transientTracks(2); - transientTracks[0] = reco::TransientTrack(*tracks[0].second, magneticField.product()); + transientTracks[0] = reco::TransientTrack(*tracks[0].second, magneticField); transientTracks[0].setTrackingGeometry(trackingGeometry); - transientTracks[1] = reco::TransientTrack(*tracks[1].second, magneticField.product()); + transientTracks[1] = reco::TransientTrack(*tracks[1].second, magneticField); transientTracks[1].setTrackingGeometry(trackingGeometry); // estimate the decay parameters. the transient tracks are not really associated to the @@ -160,7 +160,7 @@ const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajector return trajectories; } - return constructTrajectories(tracks, tbd, magneticField.product(), beamSpot, true); + return constructTrajectories(tracks, tbd, magneticField, beamSpot, true); } else { // Return without external estimate trajectories = this->trajectories(setup, tracks, beamSpot); diff --git a/Alignment/ReferenceTrajectories/src/TrajectoryFactoryBase.cc b/Alignment/ReferenceTrajectories/src/TrajectoryFactoryBase.cc index d382a43b920d8..9376bb966b098 100644 --- a/Alignment/ReferenceTrajectories/src/TrajectoryFactoryBase.cc +++ b/Alignment/ReferenceTrajectories/src/TrajectoryFactoryBase.cc @@ -6,9 +6,12 @@ #include "Alignment/ReferenceTrajectories/interface/TrajectoryFactoryBase.h" -TrajectoryFactoryBase::TrajectoryFactoryBase(const edm::ParameterSet& config) : TrajectoryFactoryBase(config, 1) {} +TrajectoryFactoryBase::TrajectoryFactoryBase(const edm::ParameterSet& config, const edm::ConsumesCollector& iC) + : TrajectoryFactoryBase(config, 1, iC) {} -TrajectoryFactoryBase::TrajectoryFactoryBase(const edm::ParameterSet& config, unsigned int tracksPerTrajectory) +TrajectoryFactoryBase::TrajectoryFactoryBase(const edm::ParameterSet& config, + unsigned int tracksPerTrajectory, + const edm::ConsumesCollector& iC) : cfg_(config), tracksPerTrajectory_(tracksPerTrajectory), materialEffects_(materialEffects(config.getParameter("MaterialEffects"))),