00001
00002
00003
00004
00005
00006
00007
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009
00010 #include "FWCore/Framework/interface/ESHandle.h"
00011 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00012 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00013 #include "FWCore/Framework/interface/Event.h"
00014 #include "DataFormats/Common/interface/View.h"
00015 #include "DataFormats/JetReco/interface/Jet.h"
00016 #include "DataFormats/TrackReco/interface/Track.h"
00017 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
00018
00019 #include "JetTracksAssociatorAtCaloFace.h"
00020
00021 JetTracksAssociatorAtCaloFace::JetTracksAssociatorAtCaloFace(const edm::ParameterSet& fConfig)
00022 : mJets (fConfig.getParameter<edm::InputTag> ("jets")),
00023 mTracks (fConfig.getParameter<edm::InputTag> ("tracks")),
00024 mAssociator (fConfig.getParameter<double> ("coneSize"))
00025 {
00026 produces<reco::JetTracksAssociation::Container> ();
00027 }
00028
00029 JetTracksAssociatorAtCaloFace::~JetTracksAssociatorAtCaloFace() {}
00030
00031 void JetTracksAssociatorAtCaloFace::produce(edm::Event& fEvent, const edm::EventSetup& fSetup) {
00032
00033 edm::ESHandle<MagneticField> field_h;
00034 fSetup.get<IdealMagneticFieldRecord>().get(field_h);
00035 edm::ESHandle<Propagator> propagator_h;
00036 fSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAlong", propagator_h);
00037
00038
00039 edm::Handle <edm::View <reco::Jet> > jets_h;
00040 fEvent.getByLabel (mJets, jets_h);
00041 edm::Handle <reco::TrackCollection> tracks_h;
00042 fEvent.getByLabel (mTracks, tracks_h);
00043
00044 std::auto_ptr<reco::JetTracksAssociation::Container> jetTracks (new reco::JetTracksAssociation::Container (reco::JetRefBaseProd(jets_h)));
00045
00046
00047 std::vector <edm::RefToBase<reco::Jet> > allJets;
00048 allJets.reserve (jets_h->size());
00049 for (unsigned i = 0; i < jets_h->size(); ++i) allJets.push_back (jets_h->refAt(i));
00050 std::vector <reco::TrackRef> allTracks;
00051 allTracks.reserve (tracks_h->size());
00052 for (unsigned i = 0; i < tracks_h->size(); ++i) allTracks.push_back (reco::TrackRef (tracks_h, i));
00053
00054 mAssociator.produce (&*jetTracks, allJets, allTracks, *field_h, *propagator_h);
00055
00056 fEvent.put (jetTracks);
00057 }