CMS 3D CMS Logo

PixelVertexProducerMedian Class Reference

#include <RecoPixelVertexing/PixelLowPtUtilities/plugins/PixelVertexProducerMedian.h>

Inheritance diagram for PixelVertexProducerMedian:

edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

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


Detailed Description

Definition at line 9 of file PixelVertexProducerMedian.h.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 42 of file PixelVertexProducerMedian.cc.

00043 { 
00044 }


Member Function Documentation

void PixelVertexProducerMedian::beginJob ( const edm::EventSetup es  )  [private, virtual]

Reimplemented from edm::EDProducer.

Definition at line 48 of file PixelVertexProducerMedian.cc.

00049 {
00050 }

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 }


Member Data Documentation

edm::ParameterSet PixelVertexProducerMedian::theConfig [private]

Definition at line 19 of file PixelVertexProducerMedian.h.

Referenced by produce().

double PixelVertexProducerMedian::thePtMin [private]

Definition at line 20 of file PixelVertexProducerMedian.h.

Referenced by produce().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:30:08 2009 for CMSSW by  doxygen 1.5.4