Go to the documentation of this file.00001 #include "VZeroProducer.h"
00002
00003 #include "RecoVZero/VZeroFinding/interface/VZeroFinder.h"
00004
00005 #include "FWCore/Framework/interface/MakerMacros.h"
00006 #include "FWCore/Framework/interface/ESHandle.h"
00007 #include "FWCore/Framework/interface/Frameworkfwd.h"
00008 #include "FWCore/ServiceRegistry/interface/Service.h"
00009
00010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00011 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00012 #include "FWCore/Utilities/interface/InputTag.h"
00013
00014 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00015
00016 using namespace std;
00017 using namespace edm;
00018
00019
00020 VZeroProducer::VZeroProducer(const ParameterSet& pset)
00021 : pset_(pset)
00022 {
00023 LogInfo("VZeroProducer") << " constructor";
00024 produces<reco::VZeroCollection>();
00025
00026
00027 minImpactPositiveDaughter =
00028 pset.getParameter<double>("minImpactPositiveDaughter");
00029 minImpactNegativeDaughter =
00030 pset.getParameter<double>("minImpactNegativeDaughter");
00031 }
00032
00033
00034 VZeroProducer::~VZeroProducer()
00035 {
00036 LogInfo("VZeroProducer") << " destructor";
00037 }
00038
00039
00040 void VZeroProducer::produce(Event& ev, const EventSetup& es)
00041 {
00042
00043 Handle<reco::TrackCollection> trackCollection;
00044 ev.getByLabel(pset_.getParameter<InputTag>("trackCollection"),
00045 trackCollection);
00046 const reco::TrackCollection tracks = *(trackCollection.product());
00047
00048
00049 Handle<reco::VertexCollection> vertexCollection;
00050 ev.getByLabel(pset_.getParameter<InputTag>("vertexCollection"),
00051 vertexCollection);
00052 const reco::VertexCollection* vertices = vertexCollection.product();
00053
00054
00055 VZeroFinder theFinder(es,pset_);
00056
00057
00058 reco::TrackRefVector positives;
00059 reco::TrackRefVector negatives;
00060
00061 for(unsigned int i=0; i<tracks.size(); i++)
00062 {
00063 if(tracks[i].charge() > 0 &&
00064 fabs(tracks[i].d0()) > minImpactPositiveDaughter)
00065 positives.push_back(reco::TrackRef(trackCollection, i));
00066
00067 if(tracks[i].charge() < 0 &&
00068 fabs(tracks[i].d0()) > minImpactNegativeDaughter)
00069 negatives.push_back(reco::TrackRef(trackCollection, i));
00070 }
00071
00072 LogTrace("MinBiasTracking") << "[VZeroProducer] using tracks :"
00073 << " +" << positives.size()
00074 << " -" << negatives.size();
00075
00076 auto_ptr<reco::VZeroCollection> result(new reco::VZeroCollection);
00077
00078
00079 if(positives.size() > 0 && negatives.size() > 0)
00080 for(reco::track_iterator ipos = positives.begin();
00081 ipos!= positives.end(); ipos++)
00082 for(reco::track_iterator ineg = negatives.begin();
00083 ineg!= negatives.end(); ineg++)
00084 {
00085 reco::VZeroData data;
00086
00087 if(theFinder.checkTrackPair(**ipos,**ineg, vertices, data) == true)
00088 {
00089
00090 reco::Vertex vertex(reco::Vertex::Point(data.crossingPoint.x(),
00091 data.crossingPoint.y(),
00092 data.crossingPoint.z()),
00093 reco::Vertex::Error(), 0.,0.,0);
00094
00095
00096 vertex.add(reco::TrackBaseRef(*ipos));
00097 vertex.add(reco::TrackBaseRef(*ineg));
00098
00099
00100 result->push_back(reco::VZero(vertex,data));
00101 }
00102 }
00103
00104 LogTrace("MinBiasTracking")
00105 << "[VZeroProducer] found candidates : " << result->size();
00106
00107
00108 ev.put(result);
00109 }
00110