CMS 3D CMS Logo

BeamSpotProducer.cc

Go to the documentation of this file.
00001 
00002 #include "RecoVertex/BeamSpotProducer/interface/BeamSpotProducer.h"
00003 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00004 
00005 #include "FWCore/Framework/interface/MakerMacros.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "FWCore/Framework/interface/ESHandle.h"
00008 #include "FWCore/Framework/interface/EventSetup.h"
00009 #include "FWCore/Framework/interface/IOVSyncValue.h"
00010 #include "CondFormats/DataRecord/interface/BeamSpotObjectsRcd.h"
00011 #include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h"
00012 
00013 #include "DataFormats/Math/interface/Error.h"
00014 #include "DataFormats/Math/interface/Point3D.h"
00015 
00016 //
00017 // constructors and destructor
00018 //
00019 BeamSpotProducer::BeamSpotProducer(const edm::ParameterSet& iConf) {
00020         
00021         edm::LogInfo("RecoVertex/BeamSpotProducer") 
00022                 << "Initializing Beam Spot producer " << "\n";
00023   
00024         //fVerbose=conf.getUntrackedParameter<bool>("verbose", false);
00025         
00026         produces<reco::BeamSpot>();
00027 
00028 }
00029 
00030 
00031 BeamSpotProducer::~BeamSpotProducer() {}
00032 
00033 //
00034 // member functions
00035 //
00036 
00037 // ------------ method called to produce the data  ------------
00038 void
00039 BeamSpotProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
00040         
00041         using namespace edm;
00042 
00043         std::auto_ptr<reco::BeamSpot> result(new reco::BeamSpot);
00044 
00045         reco::BeamSpot aSpot;
00046 
00047         
00048         //typedef math::XYZPoint Point;
00049     //enum { dimension = 7 };
00050     //typedef math::Error<dimension>::type CovarianceMatrix;
00051 
00052         
00053         try {
00054                 edm::LogInfo("RecoVertex/BeamSpotProducer") 
00055                         << "Reconstructing event number: " << iEvent.id() << "\n";
00056 
00057                 edm::ESHandle< BeamSpotObjects > beamhandle;
00058                 iSetup.get<BeamSpotObjectsRcd>().get(beamhandle);
00059                 const BeamSpotObjects *spotDB = beamhandle.product();
00060 
00061                 // translate from BeamSpotObjects to reco::BeamSpot
00062                 reco::BeamSpot::Point apoint( spotDB->GetX(), spotDB->GetY(), spotDB->GetZ() );
00063                 
00064                 reco::BeamSpot::CovarianceMatrix matrix;
00065                 for ( int i=0; i<7; ++i ) {
00066                         for ( int j=0; j<7; ++j ) {
00067                                 matrix(i,j) = spotDB->GetCovariance(i,j);
00068                         }
00069                 }
00070 
00071                 aSpot = reco::BeamSpot( apoint,
00072                                                                 spotDB->GetSigmaZ(),
00073                                                                 spotDB->Getdxdz(),
00074                                                                 spotDB->Getdydz(),
00075                                                                 spotDB->GetBeamWidth(),
00076                                                                 matrix );
00077                                 
00078         }
00079         
00080         catch (std::exception & err) {
00081                 edm::LogInfo("RecoVertex/BeamSpotProducer") 
00082                         << "Exception during event number: " << iEvent.id() 
00083                         << "\n" << err.what() << "\n";
00084         }
00085 
00086         *result = aSpot;
00087         
00088         iEvent.put(result);
00089         
00090 }
00091 
00092 //define this as a plug-in
00093 DEFINE_FWK_MODULE(BeamSpotProducer);
00094 

Generated on Tue Jun 9 17:46:02 2009 for CMSSW by  doxygen 1.5.4