#include <RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.h>
Public Member Functions | |
PixelVertexProducerMedian (const edm::ParameterSet &ps) | |
virtual void | produce (edm::Event &ev, const edm::EventSetup &es) |
~PixelVertexProducerMedian () | |
Private Member Functions | |
void | beginJob (const edm::EventSetup &es) |
Private Attributes | |
edm::ParameterSet | theConfig |
double | thePtMin |
Definition at line 9 of file PixelVertexProducerMedian.h.
PixelVertexProducerMedian::PixelVertexProducerMedian | ( | const edm::ParameterSet & | ps | ) | [explicit] |
Definition at line 35 of file PixelVertexProducerMedian.cc.
00035 : theConfig(ps) 00036 { 00037 produces<reco::VertexCollection>(); 00038 }
PixelVertexProducerMedian::~PixelVertexProducerMedian | ( | ) |
void PixelVertexProducerMedian::beginJob | ( | const edm::EventSetup & | es | ) | [private, virtual] |
void PixelVertexProducerMedian::produce | ( | edm::Event & | ev, | |
const edm::EventSetup & | es | |||
) | [virtual] |
Implements edm::EDProducer.
Definition at line 54 of file PixelVertexProducerMedian.cc.
References err, f1, edm::Event::getByLabel(), edm::ParameterSet::getParameter(), histo, i, LogTrace, edm::Handle< T >::product(), edm::Event::put(), python::multivaluedict::sort(), theConfig, thePtMin, track, tracks, and mergeAndRegister_online::ver.
00055 { 00056 // Get pixel tracks 00057 edm::Handle<reco::TrackCollection> trackCollection; 00058 std::string trackCollectionName = 00059 theConfig.getParameter<std::string>("TrackCollection"); 00060 ev.getByLabel(trackCollectionName, trackCollection); 00061 const reco::TrackCollection tracks_ = *(trackCollection.product()); 00062 00063 thePtMin = theConfig.getParameter<double>("PtMin"); 00064 00065 // Select tracks 00066 std::vector<const reco::Track *> tracks; 00067 for (unsigned int i=0; i<tracks_.size(); i++) 00068 { 00069 if (tracks_[i].pt() > thePtMin) 00070 { 00071 reco::TrackRef recTrack(trackCollection, i); 00072 tracks.push_back( &(*recTrack)); 00073 } 00074 } 00075 00076 LogTrace("MinBiasTracking") 00077 << " [VertexProducer] selected tracks: " 00078 << tracks.size() << " (out of " << tracks_.size() 00079 << ")"; 00080 00081 std::auto_ptr<reco::VertexCollection> vertices(new reco::VertexCollection); 00082 00083 if(tracks.size() > 10) 00084 { 00085 // Sort along vertex z position 00086 std::sort(tracks.begin(), tracks.end(), ComparePairs()); 00087 00088 // Median 00089 float med; 00090 if(tracks.size() % 2 == 0) 00091 med = (tracks[tracks.size()/2-1]->vz() + tracks[tracks.size()/2]->vz())/2; 00092 else 00093 med = tracks[tracks.size()/2 ]->vz(); 00094 00095 LogTrace("MinBiasTracking") 00096 << " [vertex position] median = " << med << " cm"; 00097 00098 // Binning around med, halfWidth 00099 int nBin = 100; 00100 float halfWidth = 0.1; // cm 00101 00102 // Most probable 00103 TH1F histo("histo","histo", nBin, -halfWidth,halfWidth); 00104 00105 for(std::vector<const reco::Track *>::const_iterator 00106 track = tracks.begin(); track!= tracks.end(); track++) 00107 if(fabs((*track)->vz() - med) < halfWidth) 00108 histo.Fill((*track)->vz() - med); 00109 00110 LogTrace("MinBiasTracking") 00111 << " [vertex position] most prob = " 00112 << med + histo.GetBinCenter(histo.GetMaximumBin()) 00113 << " cm"; 00114 00115 // Fit above max/2 00116 histo.Sumw2(); 00117 00118 TF1 f1("f1","[0]*exp(-0.5 * ((x-[1])/[2])^2) + [3]"); 00119 f1.SetParameters(10.,0.,0.01, 1.); 00120 00121 histo.Fit("f1","QN"); 00122 00123 LogTrace("MinBiasTracking") 00124 << " [vertex position] fitted = " 00125 << med + f1.GetParameter(1) << " +- " << f1.GetParError(1) 00126 << " cm"; 00127 00128 // Store 00129 reco::Vertex::Error err; 00130 err(2,2) = f1.GetParError(1) * f1.GetParError(1); 00131 reco::Vertex ver(reco::Vertex::Point(0,0,med + f1.GetParameter(1)), 00132 err, 0, 1, 1); 00133 00134 vertices->push_back(ver); 00135 } 00136 ev.put(vertices); 00137 }
double PixelVertexProducerMedian::thePtMin [private] |