00001 #include "RecoVertex/KalmanVertexFit/plugins/KVFTrackUpdate.h"
00002
00003 #include "DataFormats/VertexReco/interface/Vertex.h"
00004 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00005 #include "DataFormats/TrackReco/interface/Track.h"
00006 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00007 #include "DataFormats/Common/interface/EDProduct.h"
00008 #include "DataFormats/Common/interface/Handle.h"
00009 #include "FWCore/Framework/interface/MakerMacros.h"
00010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00011 #include "FWCore/Framework/interface/ESHandle.h"
00012
00013 #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
00014 #include "TrackingTools/Records/interface/TransientTrackRecord.h"
00015 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
00016 #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
00017 #include "RecoVertex/VertexPrimitives/interface/ConvertError.h"
00018 #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h"
00019 #include "SimTracker/Records/interface/TrackAssociatorRecord.h"
00020 #include "RecoVertex/KalmanVertexFit/interface/SingleTrackVertexConstraint.h"
00021
00022 #include <iostream>
00023
00024 using namespace reco;
00025 using namespace edm;
00026 using namespace std;
00027
00028 KVFTrackUpdate::KVFTrackUpdate(const edm::ParameterSet& iConfig)
00029 {
00030 trackLabel_ = iConfig.getParameter<edm::InputTag>("TrackLabel");
00031 beamSpotLabel = iConfig.getParameter<edm::InputTag>("beamSpotLabel");
00032 }
00033
00034
00035 KVFTrackUpdate::~KVFTrackUpdate() {
00036 }
00037
00038 void KVFTrackUpdate::beginJob(edm::EventSetup const& setup){
00039 }
00040
00041
00042 void KVFTrackUpdate::endJob() {
00043 }
00044
00045
00046
00047
00048
00049 void
00050 KVFTrackUpdate::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00051 {
00052
00053
00054
00055 try {
00056 edm::LogInfo("RecoVertex/KVFTrackUpdate")
00057 << "Reconstructing event number: " << iEvent.id() << "\n";
00058
00059
00060
00061 edm::Handle<reco::TrackCollection> tks;
00062 iEvent.getByLabel(trackLabel_, tks);
00063
00064 edm::LogInfo("RecoVertex/KVFTrackUpdate")
00065 << "Found: " << (*tks).size() << " reconstructed tracks" << "\n";
00066 cout << "got " << (*tks).size() << " tracks " << endl;
00067
00068
00069
00070
00071 edm::ESHandle<TransientTrackBuilder> theB;
00072 iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
00073
00074 vector<TransientTrack> t_tks = (*theB).build(tks);
00075
00076 edm::LogInfo("RecoVertex/KVFTrackUpdate")
00077 << "Found: " << t_tks.size() << " reconstructed tracks" << "\n";
00078
00079 GlobalPoint glbPos(0.,0.,0.);
00080
00081 AlgebraicSymMatrix mat(3,0);
00082 mat[0][0] = (20.e-04)*(20.e-04);
00083 mat[1][1] = (20.e-04)*(20.e-04);
00084 mat[2][2] = (5.3)*(5.3);
00085 GlobalError glbErrPos(mat);
00086
00087 reco::BeamSpot vertexBeamSpot;
00088 edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
00089 iEvent.getByLabel(beamSpotLabel,recoBeamSpotHandle);
00090
00091
00092 SingleTrackVertexConstraint stvc;
00093 for (int i = 0; i<t_tks.size();i++) {
00094 SingleTrackVertexConstraint::TrackFloatPair a =
00095 stvc.constrain(t_tks[i], glbPos, glbErrPos);
00096 std::cout << "Chi2: "<< a.second<<std::endl;
00097 if (recoBeamSpotHandle.isValid()){
00098 SingleTrackVertexConstraint::TrackFloatPair b =
00099 stvc.constrain(t_tks[i], *recoBeamSpotHandle);
00100 std::cout << "Chi2: "<< b.second<<std::endl;
00101 }
00102 }
00103 }
00104
00105
00106 catch (std::exception & err) {
00107 edm::LogInfo("RecoVertex/KVFTrackUpdate")
00108 << "Exception during event number: " << iEvent.id()
00109 << "\n" << err.what() << "\n";
00110 }
00111
00112 }
00113
00114 DEFINE_FWK_MODULE(KVFTrackUpdate);