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