File indexing completed on 2024-04-06 12:29:03
0001
0002 #include "RecoVertex/BeamSpotProducer/interface/BeamSpotProducer.h"
0003 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0004
0005 #include "FWCore/Framework/interface/MakerMacros.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007 #include "FWCore/Framework/interface/ESHandle.h"
0008 #include "FWCore/Framework/interface/EventSetup.h"
0009 #include "FWCore/Framework/interface/IOVSyncValue.h"
0010
0011 #include "DataFormats/Math/interface/Error.h"
0012 #include "DataFormats/Math/interface/Point3D.h"
0013
0014
0015
0016
0017 BeamSpotProducer::BeamSpotProducer(const edm::ParameterSet& iConf) {
0018 edm::LogInfo("RecoVertex/BeamSpotProducer") << "Initializing Beam Spot producer "
0019 << "\n";
0020
0021
0022 m_beamToken = esConsumes<BeamSpotObjects, BeamSpotObjectsRcd>();
0023
0024 produces<reco::BeamSpot>();
0025 }
0026
0027 BeamSpotProducer::~BeamSpotProducer() {}
0028
0029
0030
0031
0032
0033
0034 void BeamSpotProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0035 using namespace edm;
0036
0037 auto result = std::make_unique<reco::BeamSpot>();
0038
0039 reco::BeamSpot aSpot;
0040
0041
0042
0043
0044
0045
0046 edm::LogInfo("RecoVertex/BeamSpotProducer") << "Reconstructing event number: " << iEvent.id() << "\n";
0047
0048 edm::ESHandle<BeamSpotObjects> beamhandle = iSetup.getHandle(m_beamToken);
0049 const BeamSpotObjects* spotDB = beamhandle.product();
0050
0051
0052 reco::BeamSpot::Point apoint(spotDB->x(), spotDB->y(), spotDB->z());
0053
0054 reco::BeamSpot::CovarianceMatrix matrix;
0055 for (int i = 0; i < 7; ++i) {
0056 for (int j = 0; j < 7; ++j) {
0057 matrix(i, j) = spotDB->covariance(i, j);
0058 }
0059 }
0060
0061
0062 aSpot = reco::BeamSpot(apoint, spotDB->sigmaZ(), spotDB->dxdz(), spotDB->dydz(), spotDB->beamWidthX(), matrix);
0063 aSpot.setBeamWidthY(spotDB->beamWidthY());
0064 aSpot.setEmittanceX(spotDB->emittanceX());
0065 aSpot.setEmittanceY(spotDB->emittanceY());
0066 aSpot.setbetaStar(spotDB->betaStar());
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076 *result = aSpot;
0077
0078 iEvent.put(std::move(result));
0079 }
0080
0081
0082 DEFINE_FWK_MODULE(BeamSpotProducer);