CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/RecoParticleFlow/PFTracking/plugins/PFDisplacedVertexCandidateProducer.cc

Go to the documentation of this file.
00001 #include "RecoParticleFlow/PFTracking/plugins/PFDisplacedVertexCandidateProducer.h"
00002 
00003 #include "FWCore/Framework/interface/ESHandle.h"
00004 
00005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00006 #include "FWCore/Utilities/interface/Exception.h"
00007 #include "FWCore/Framework/interface/EventSetup.h"
00008 
00009 #include "FWCore/ParameterSet/interface/FileInPath.h"
00010 
00011 #include "MagneticField/Engine/interface/MagneticField.h"
00012 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00013 
00014 #include "DataFormats/ParticleFlowReco/interface/PFDisplacedVertexCandidateFwd.h"
00015 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00016 
00017 #include <set>
00018 
00019 using namespace std;
00020 using namespace edm;
00021 
00022 PFDisplacedVertexCandidateProducer::PFDisplacedVertexCandidateProducer(const edm::ParameterSet& iConfig) {
00023   
00024   // --- Setup input collection names --- //
00025   inputTagTracks_ 
00026     = iConfig.getParameter<InputTag>("trackCollection");
00027 
00028   inputTagMainVertex_ 
00029     = iConfig.getParameter<InputTag>("mainVertexLabel");
00030 
00031   inputTagBeamSpot_ 
00032     = iConfig.getParameter<InputTag>("offlineBeamSpotLabel");
00033 
00034   verbose_ = 
00035     iConfig.getUntrackedParameter<bool>("verbose");
00036 
00037   bool debug = 
00038     iConfig.getUntrackedParameter<bool>("debug");
00039 
00040   // ------ Algo Parameters ------ //
00041 
00042   // Distance of minimal approach below which 
00043   // two tracks are considered as linked together
00044   double dcaCut 
00045     = iConfig.getParameter< double >("dcaCut");   
00046 
00047   // Do not reconstruct vertices wich are 
00048   // too close to the beam pipe
00049   double primaryVertexCut
00050     = iConfig.getParameter< double >("primaryVertexCut");   
00051 
00052   //maximum distance between the DCA Point and the inner hit of the track
00053   double dcaPInnerHitCut
00054     = iConfig.getParameter< double >("dcaPInnerHitCut");  
00055 
00056   edm::ParameterSet ps_trk 
00057     = iConfig.getParameter<edm::ParameterSet>("tracksSelectorParameters");
00058 
00059   // Collection to be produced
00060   produces<reco::PFDisplacedVertexCandidateCollection>();
00061 
00062   // Vertex Finder parameters  -----------------------------------
00063   pfDisplacedVertexCandidateFinder_.setDebug(debug);
00064   pfDisplacedVertexCandidateFinder_.setParameters(dcaCut, primaryVertexCut, dcaPInnerHitCut, ps_trk);
00065      
00066 }
00067 
00068 
00069 PFDisplacedVertexCandidateProducer::~PFDisplacedVertexCandidateProducer() { }
00070 
00071 
00072 
00073 void 
00074 PFDisplacedVertexCandidateProducer::beginJob() { }
00075 
00076 void 
00077 PFDisplacedVertexCandidateProducer::beginRun(edm::Run & run, 
00078                           const edm::EventSetup & es) { }
00079 
00080 
00081 void 
00082 PFDisplacedVertexCandidateProducer::produce(Event& iEvent, 
00083                          const EventSetup& iSetup) {
00084   
00085   LogDebug("PFDisplacedVertexCandidateProducer")<<"START event: "<<iEvent.id().event()
00086                              <<" in run "<<iEvent.id().run()<<endl;
00087   
00088   // Prepare and fill useful event information for the Finder
00089   edm::ESHandle<MagneticField> magField;
00090   iSetup.get<IdealMagneticFieldRecord>().get(magField);
00091   const MagneticField* theMagField = magField.product();
00092 
00093   Handle <reco::TrackCollection> trackCollection;
00094   iEvent.getByLabel(inputTagTracks_, trackCollection);
00095     
00096   Handle< reco::VertexCollection > mainVertexHandle;
00097   iEvent.getByLabel(inputTagMainVertex_, mainVertexHandle);
00098 
00099   Handle< reco::BeamSpot > beamSpotHandle;
00100   iEvent.getByLabel(inputTagBeamSpot_, beamSpotHandle);
00101 
00102   pfDisplacedVertexCandidateFinder_.setInput( trackCollection, theMagField );
00103   pfDisplacedVertexCandidateFinder_.setPrimaryVertex(mainVertexHandle, beamSpotHandle);
00104 
00105 
00106   // Run the finder
00107   pfDisplacedVertexCandidateFinder_.findDisplacedVertexCandidates();
00108   
00109 
00110   if(verbose_) {
00111     ostringstream  str;
00112     str<<pfDisplacedVertexCandidateFinder_<<endl;
00113     cout << pfDisplacedVertexCandidateFinder_<<endl;
00114     LogInfo("PFDisplacedVertexCandidateProducer") << str.str()<<endl;
00115   }    
00116 
00117 
00118   auto_ptr< reco::PFDisplacedVertexCandidateCollection > 
00119     pOutputDisplacedVertexCandidateCollection(
00120       pfDisplacedVertexCandidateFinder_.transferVertexCandidates() ); 
00121   
00122   
00123   iEvent.put(pOutputDisplacedVertexCandidateCollection);
00124  
00125   LogDebug("PFDisplacedVertexCandidateProducer")<<"STOP event: "<<iEvent.id().event()
00126                              <<" in run "<<iEvent.id().run()<<endl;
00127 
00128 }