CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
FastPrimaryVertexWithWeightsProducer Class Reference

#include <RecoBTag/FastPrimaryVertexWithWeightsProducer/src/FastPrimaryVertexWithWeightsProducer.cc>

Inheritance diagram for FastPrimaryVertexWithWeightsProducer:
edm::stream::EDProducer<>

Public Member Functions

 FastPrimaryVertexWithWeightsProducer (const edm::ParameterSet &)
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

edm::EDGetTokenT< reco::BeamSpotbeamSpotToken
 
edm::EDGetTokenT< SiPixelClusterCollectionNewclustersToken
 
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken
 
const bool m_barrel
 
const edm::InputTag m_clusters
 
const double m_EC_weight
 
const bool m_endCap
 
const double m_maxDeltaPhi
 
const double m_maxDeltaPhi_EC
 
const double m_maxJetEta
 
const double m_maxJetEta_EC
 
const double m_maxSizeX
 
const double m_maxSizeY_q
 
const double m_maxZ
 
const double m_minJetEta_EC
 
const double m_minJetPt
 
const double m_minSizeY_q
 
const int m_njets
 
const double m_peakSizeY_q
 
const double m_PixelCellHeightOverWidth
 
std::string m_pixelCPE
 
const bool m_ptWeighting
 
const double m_ptWeighting_offset
 
const double m_ptWeighting_slope
 
const double m_weight_charge_down
 
const double m_weight_charge_peak
 
const double m_weight_charge_up
 
const double m_weight_dPhi
 
const double m_weight_dPhi_EC
 
const double m_weight_rho_up
 
const double m_weight_SizeX1
 
const double m_weightCut_step2
 
const double m_weightCut_step3
 
const double m_zClusterSearchArea_step2
 
const double m_zClusterSearchArea_step3
 
const double m_zClusterWidth_step1
 
const double m_zClusterWidth_step2
 
const double m_zClusterWidth_step3
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Description: The FastPrimaryVertex is an algorithm used to find the primary vertex of an event . It takes the pixel clusters compabible with a jet and project it to the beamSpot with the eta-angle of the jet. The peak on the z-projected clusters distribution is our FastPrimaryVertex.

Implementation: [Notes on implementation]

Definition at line 56 of file FastPrimaryVertexWithWeightsProducer.cc.

Constructor & Destructor Documentation

FastPrimaryVertexWithWeightsProducer::FastPrimaryVertexWithWeightsProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 127 of file FastPrimaryVertexWithWeightsProducer.cc.

References beamSpotToken, clustersToken, edm::ParameterSet::getParameter(), and jetsToken.

128  : m_maxZ(iConfig.getParameter<double>("maxZ")),
129  m_pixelCPE(iConfig.getParameter<std::string>("pixelCPE")),
130 
131  m_njets(iConfig.getParameter<int>("njets")),
132  m_maxJetEta(iConfig.getParameter<double>("maxJetEta")),
133  m_minJetPt(iConfig.getParameter<double>("minJetPt")),
134 
135  m_barrel(iConfig.getParameter<bool>("barrel")),
136  m_maxSizeX(iConfig.getParameter<double>("maxSizeX")),
137  m_maxDeltaPhi(iConfig.getParameter<double>("maxDeltaPhi")),
138  m_weight_charge_down(iConfig.getParameter<double>("weight_charge_down")),
139  m_weight_charge_up(iConfig.getParameter<double>("weight_charge_up")),
140  m_PixelCellHeightOverWidth(iConfig.getParameter<double>("PixelCellHeightOverWidth")),
141  m_minSizeY_q(iConfig.getParameter<double>("minSizeY_q")),
142  m_maxSizeY_q(iConfig.getParameter<double>("maxSizeY_q")),
143 
144  m_weight_dPhi(iConfig.getParameter<double>("weight_dPhi")),
145  m_weight_SizeX1(iConfig.getParameter<double>("weight_SizeX1")),
146  m_weight_rho_up(iConfig.getParameter<double>("weight_rho_up")),
147  m_weight_charge_peak(iConfig.getParameter<double>("weight_charge_peak")),
148  m_peakSizeY_q(iConfig.getParameter<double>("peakSizeY_q")),
149 
150  m_endCap(iConfig.getParameter<bool>("endCap")),
151  m_minJetEta_EC(iConfig.getParameter<double>("minJetEta_EC")),
152  m_maxJetEta_EC(iConfig.getParameter<double>("maxJetEta_EC")),
153  m_maxDeltaPhi_EC(iConfig.getParameter<double>("maxDeltaPhi_EC")),
154  m_EC_weight(iConfig.getParameter<double>("EC_weight")),
155  m_weight_dPhi_EC(iConfig.getParameter<double>("weight_dPhi_EC")),
156 
157  m_zClusterWidth_step1(iConfig.getParameter<double>("zClusterWidth_step1")),
158 
159  m_zClusterWidth_step2(iConfig.getParameter<double>("zClusterWidth_step2")),
160  m_zClusterSearchArea_step2(iConfig.getParameter<double>("zClusterSearchArea_step2")),
161  m_weightCut_step2(iConfig.getParameter<double>("weightCut_step2")),
162 
163  m_zClusterWidth_step3(iConfig.getParameter<double>("zClusterWidth_step3")),
164  m_zClusterSearchArea_step3(iConfig.getParameter<double>("zClusterSearchArea_step3")),
165  m_weightCut_step3(iConfig.getParameter<double>("weightCut_step3")),
166 
167  m_ptWeighting(iConfig.getParameter<bool>("ptWeighting")),
168  m_ptWeighting_slope(iConfig.getParameter<double>("ptWeighting_slope")),
169  m_ptWeighting_offset(iConfig.getParameter<double>("ptWeighting_offset")) {
170  clustersToken = consumes<SiPixelClusterCollectionNew>(iConfig.getParameter<edm::InputTag>("clusters"));
171  beamSpotToken = consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpot"));
172  jetsToken = consumes<edm::View<reco::Jet> >(iConfig.getParameter<edm::InputTag>("jets"));
173 
174  produces<reco::VertexCollection>();
175  produces<float>();
176 }
T getParameter(std::string const &) const
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken
edm::EDGetTokenT< SiPixelClusterCollectionNew > clustersToken

Member Function Documentation

void FastPrimaryVertexWithWeightsProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 178 of file FastPrimaryVertexWithWeightsProducer.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), HLT_2018_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

178  {
180  desc.add<edm::InputTag>("clusters", edm::InputTag("hltSiPixelClusters"));
181  desc.add<edm::InputTag>("beamSpot", edm::InputTag("hltOnlineBeamSpot"));
182  desc.add<edm::InputTag>("jets", edm::InputTag("hltCaloJetL1FastJetCorrected"));
183  desc.add<std::string>("pixelCPE", "hltESPPixelCPEGeneric");
184  desc.add<double>("maxZ", 19.0);
185  desc.add<int>("njets", 999);
186  desc.add<double>("maxJetEta", 2.6);
187  desc.add<double>("minJetPt", 40.);
188  desc.add<bool>("barrel", true);
189  desc.add<double>("maxSizeX", 2.1);
190  desc.add<double>("maxDeltaPhi", 0.21);
191  desc.add<double>("PixelCellHeightOverWidth", 1.8);
192  desc.add<double>("weight_charge_down", 11. * 1000.);
193  desc.add<double>("weight_charge_up", 190. * 1000.);
194  desc.add<double>("maxSizeY_q", 2.0);
195  desc.add<double>("minSizeY_q", -0.6);
196  desc.add<double>("weight_dPhi", 0.13888888);
197  desc.add<double>("weight_SizeX1", 0.88);
198  desc.add<double>("weight_rho_up", 22.);
199  desc.add<double>("weight_charge_peak", 22. * 1000.);
200  desc.add<double>("peakSizeY_q", 1.0);
201  desc.add<bool>("endCap", true);
202  desc.add<double>("minJetEta_EC", 1.3);
203  desc.add<double>("maxJetEta_EC", 2.6);
204  desc.add<double>("maxDeltaPhi_EC", 0.14);
205  desc.add<double>("EC_weight", 0.008);
206  desc.add<double>("weight_dPhi_EC", 0.064516129);
207  desc.add<double>("zClusterWidth_step1", 2.0);
208  desc.add<double>("zClusterWidth_step2", 0.65);
209  desc.add<double>("zClusterSearchArea_step2", 3.0);
210  desc.add<double>("weightCut_step2", 0.05);
211  desc.add<double>("zClusterWidth_step3", 0.3);
212  desc.add<double>("zClusterSearchArea_step3", 0.55);
213  desc.add<double>("weightCut_step3", 0.1);
214  desc.add<bool>("ptWeighting", false); // <---- newMethod
215  desc.add<double>("ptWeighting_slope", 1 / 20.);
216  desc.add<double>("ptWeighting_offset", -1);
217  descriptions.add("fastPrimaryVertexWithWeightsProducer", desc);
218 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void FastPrimaryVertexWithWeightsProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

if it is a cluster to project

Definition at line 220 of file FastPrimaryVertexWithWeightsProducer.cc.

References funct::abs(), pwdgSkimBPark_cfi::beamSpot, beamSpotToken, edm::View< T >::begin(), edmNew::DetSetVector< T >::begin(), ALCARECOTkAlJpsiMuMu_cff::charge, SiPixelCluster::charge(), clustersToken, DEFINE_FWK_MODULE, SiPixelRawToDigiRegional_cfi::deltaPhi, MillePedeFileConverter_cfg::e, edm::View< T >::end(), edmNew::DetSetVector< T >::end(), PVValHelper::eta, JetChargeProducer_cfi::exp, FindPeakFastPV(), edm::EventSetup::get(), edm::Event::getByToken(), mps_fire::i, TrackerGeometry::idToDet(), TrackerGeometry::idToDetUnit(), dqmiolumiharvest::j, singleTopDQM_cfi::jets, jetsToken, PixelClusterParameterEstimator::localParametersV(), m_barrel, m_EC_weight, m_endCap, m_maxDeltaPhi, m_maxDeltaPhi_EC, m_maxJetEta, m_maxJetEta_EC, m_maxSizeX, m_maxSizeY_q, m_maxZ, m_minJetEta_EC, m_minJetPt, m_minSizeY_q, m_njets, m_peakSizeY_q, m_PixelCellHeightOverWidth, m_pixelCPE, m_ptWeighting, m_ptWeighting_offset, m_ptWeighting_slope, m_weight_charge_down, m_weight_charge_peak, m_weight_charge_up, m_weight_dPhi, m_weight_dPhi_EC, m_weight_rho_up, m_weight_SizeX1, m_weightCut_step2, m_weightCut_step3, m_zClusterSearchArea_step2, m_zClusterSearchArea_step3, m_zClusterWidth_step1, m_zClusterWidth_step2, m_zClusterWidth_step3, eostools::move(), AlCaHLTBitMon_ParallelJobs::p, PV3DBase< T, PVType, FrameType >::phi(), LumiMonitor_cff::pixelClusters, GeomDet::position(), createTree::pp, edm::Handle< T >::product(), edm::ESHandle< T >::product(), DiDispStaMuonMonitor_cfi::pt, edm::Event::put(), multPhiCorr_741_25nsDY_cfi::px, multPhiCorr_741_25nsDY_cfi::py, rho, objectSelection_cff::selectedJets, edmNew::DetSet< T >::size(), SiPixelCluster::sizeX(), SiPixelCluster::sizeY(), RecoTauValidation_cfi::sizeY, mathSSE::sqrt(), GeomDet::surface(), Surface::toGlobal(), PbPb_ZMuSkimMuonDPG_cff::tracker, findQualityFiles::v, HLT_2018_cff::weight_dPhi, PV3DBase< T, PVType, FrameType >::x(), reco::BeamSpot::x(), reco::BeamSpot::x0(), PV3DBase< T, PVType, FrameType >::y(), reco::BeamSpot::y(), reco::BeamSpot::y0(), z, and PV3DBase< T, PVType, FrameType >::z().

220  {
221  using namespace edm;
222  using namespace reco;
223  using namespace std;
224 
225  const float barrel_lenght = 30; //half lenght of the pixel barrel 30 cm
226 
227  //get pixel cluster
229  iEvent.getByToken(clustersToken, cH);
231 
232  //get jets
234  iEvent.getByToken(jetsToken, jH);
235  const edm::View<reco::Jet>& jets = *jH.product();
236 
237  vector<const reco::Jet*> selectedJets;
238  int countjet = 0;
239  for (edm::View<reco::Jet>::const_iterator it = jets.begin(); it != jets.end() && countjet < m_njets; it++) {
240  if ( //select jets used in barrel or endcap pixel cluster projections
241  ((it->pt() >= m_minJetPt) && std::abs(it->eta()) <= m_maxJetEta) || //barrel
242  ((it->pt() >= m_minJetPt) && std::abs(it->eta()) <= m_maxJetEta_EC &&
243  std::abs(it->eta()) >= m_minJetEta_EC) //endcap
244  ) {
245  selectedJets.push_back(&(*it));
246  countjet++;
247  }
248  }
249 
250  //get PixelClusterParameterEstimator
253  iSetup.get<TkPixelCPERecord>().get(m_pixelCPE, pe);
254  pp = pe.product();
255 
256  //get beamSpot
258  iEvent.getByToken(beamSpotToken, beamSpot);
259 
260  //get TrackerGeometry
262  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
263  const TrackerGeometry* trackerGeometry = tracker.product();
264 
265  // PART I: get z-projections with z-weights
266  std::vector<float> zProjections;
267  std::vector<float> zWeights;
268  int jet_count = 0;
269  for (vector<const reco::Jet*>::iterator jit = selectedJets.begin(); jit != selectedJets.end();
270  jit++) { //loop on selected jets
271  float px = (*jit)->px();
272  float py = (*jit)->py();
273  float pz = (*jit)->pz();
274  float pt = (*jit)->pt();
275  float eta = (*jit)->eta();
276  float jetZOverRho = (*jit)->momentum().Z() / (*jit)->momentum().Rho();
277  float pt_weight = pt * m_ptWeighting_slope + m_ptWeighting_offset;
278  for (SiPixelClusterCollectionNew::const_iterator it = pixelClusters.begin(); it != pixelClusters.end();
279  it++) //Loop on pixel modules with clusters
280  { //loop on pixel modules
281  DetId id = it->detId();
282  const edmNew::DetSet<SiPixelCluster>& detset = (*it);
283  Point3DBase<float, GlobalTag> modulepos = trackerGeometry->idToDet(id)->position();
284  float zmodule = modulepos.z() -
285  ((modulepos.x() - beamSpot->x0()) * px + (modulepos.y() - beamSpot->y0()) * py) / pt * pz / pt;
286  if ((std::abs(deltaPhi((*jit)->momentum().Phi(), modulepos.phi())) < m_maxDeltaPhi * 2) &&
287  (std::abs(zmodule) < (m_maxZ + barrel_lenght))) { //if it is a compatible module
288  for (size_t j = 0; j < detset.size(); j++) { //loop on pixel clusters on this module
289  const SiPixelCluster& aCluster = detset[j];
290  if ( //it is a cluster to project
291  ( // barrel
292  m_barrel && std::abs(modulepos.z()) < barrel_lenght && pt >= m_minJetPt && jet_count < m_njets &&
293  std::abs(eta) <= m_maxJetEta && aCluster.sizeX() <= m_maxSizeX &&
294  aCluster.sizeY() >= m_PixelCellHeightOverWidth * std::abs(jetZOverRho) + m_minSizeY_q &&
295  aCluster.sizeY() <= m_PixelCellHeightOverWidth * std::abs(jetZOverRho) + m_maxSizeY_q) ||
296  ( // EC
297  m_endCap && std::abs(modulepos.z()) > barrel_lenght && pt > m_minJetPt && jet_count < m_njets &&
298  std::abs(eta) <= m_maxJetEta_EC && std::abs(eta) >= m_minJetEta_EC &&
299  aCluster.sizeX() <= m_maxSizeX)) {
300  Point3DBase<float, GlobalTag> v = trackerGeometry->idToDet(id)->surface().toGlobal(
301  pp->localParametersV(aCluster, (*trackerGeometry->idToDetUnit(id)))[0].first);
302  GlobalPoint v_bs(v.x() - beamSpot->x0(), v.y() - beamSpot->y0(), v.z());
303  if ( //it pass DeltaPhi(Jet,Cluster) requirements
304  (m_barrel && std::abs(modulepos.z()) < barrel_lenght &&
305  std::abs(deltaPhi((*jit)->momentum().Phi(), v_bs.phi())) <= m_maxDeltaPhi) || //barrel
306  (m_endCap && std::abs(modulepos.z()) > barrel_lenght &&
307  std::abs(deltaPhi((*jit)->momentum().Phi(), v_bs.phi())) <= m_maxDeltaPhi_EC) //EC
308  ) {
309  //calculate z-projection
310  float z = v.z() - ((v.x() - beamSpot->x0()) * px + (v.y() - beamSpot->y0()) * py) / pt * pz / pt;
311  if (std::abs(z) < m_maxZ) {
312  zProjections.push_back(z); //add z-projection in zProjections
313  float weight = 0;
314  //calculate zWeight
315  if (std::abs(modulepos.z()) < barrel_lenght) { //barrel
316  //calculate weight_sizeY
317  float sizeY = aCluster.sizeY();
318  float sizeY_up = m_PixelCellHeightOverWidth * std::abs(jetZOverRho) + m_maxSizeY_q;
319  float sizeY_peak = m_PixelCellHeightOverWidth * std::abs(jetZOverRho) + m_peakSizeY_q;
320  float sizeY_down = m_PixelCellHeightOverWidth * std::abs(jetZOverRho) + m_minSizeY_q;
321  float weight_sizeY_up = (sizeY_up - sizeY) / (sizeY_up - sizeY_peak);
322  float weight_sizeY_down = (sizeY - sizeY_down) / (sizeY_peak - sizeY_down);
323  weight_sizeY_down = weight_sizeY_down * (weight_sizeY_down > 0) * (weight_sizeY_down < 1);
324  weight_sizeY_up = weight_sizeY_up * (weight_sizeY_up > 0) * (weight_sizeY_up < 1);
325  float weight_sizeY = weight_sizeY_up + weight_sizeY_down;
326 
327  //calculate weight_rho
328  float rho = sqrt(v_bs.x() * v_bs.x() + v_bs.y() * v_bs.y());
329  float weight_rho = ((m_weight_rho_up - rho) / m_weight_rho_up);
330 
331  //calculate weight_dPhi
332  float weight_dPhi = exp(-std::abs(deltaPhi((*jit)->momentum().Phi(), v_bs.phi())) / m_weight_dPhi);
333 
334  //calculate weight_sizeX1
335  float weight_sizeX1 = (aCluster.sizeX() == 2) + (aCluster.sizeX() == 1) * m_weight_SizeX1;
336 
337  //calculate weight_charge
338  float charge = aCluster.charge();
339  float weightCluster_up = (m_weight_charge_up - charge) / (m_weight_charge_up - m_weight_charge_peak);
340  float weightCluster_down =
342  weightCluster_down = weightCluster_down * (weightCluster_down > 0) * (weightCluster_down < 1);
343  weightCluster_up = weightCluster_up * (weightCluster_up > 0) * (weightCluster_up < 1);
344  float weight_charge = weightCluster_up + weightCluster_down;
345 
346  //calculate the final weight
347  weight = weight_dPhi * weight_sizeY * weight_rho * weight_sizeX1 * weight_charge;
348  } else if (std::abs(modulepos.z()) > barrel_lenght) // EC
349  { // EC
350  //calculate weight_dPhi
351  float weight_dPhi = exp(-std::abs(deltaPhi((*jit)->momentum().Phi(), v_bs.phi())) / m_weight_dPhi_EC);
352  //calculate the final weight
353  weight = m_EC_weight * (weight_dPhi);
354  }
355  if (m_ptWeighting)
356  weight = weight * pt_weight;
357  zWeights.push_back(weight); //add the weight to zWeights
358  }
359  } //if it pass DeltaPhi(Jet,Cluster) requirements
360  }
361  } //loop on pixel clusters on this module
362  } //if it is a compatible module
363  } //loop on pixel modules
364  jet_count++;
365  } //loop on selected jets
366 
367  //order zProjections and zWeights by z
368  std::multimap<float, float> zWithW;
369  size_t i = 0;
370  for (i = 0; i < zProjections.size(); i++)
371  zWithW.insert(std::pair<float, float>(zProjections[i], zWeights[i]));
372  i = 0;
373  for (std::multimap<float, float>::iterator it = zWithW.begin(); it != zWithW.end(); it++, i++) {
374  zProjections[i] = it->first;
375  zWeights[i] = it->second;
376  } //order zProjections and zWeights by z
377 
378  //calculate zWeightsSquared
379  std::vector<float> zWeightsSquared;
380  for (std::vector<float>::iterator it = zWeights.begin(); it != zWeights.end(); it++) {
381  zWeightsSquared.push_back((*it) * (*it));
382  }
383 
384  //do multi-step peak searching
385  float res_step1 = FindPeakFastPV(zProjections, zWeights, 0.0, m_zClusterWidth_step1, 999.0, -1.0);
386  float res_step2 = FindPeakFastPV(
387  zProjections, zWeights, res_step1, m_zClusterWidth_step2, m_zClusterSearchArea_step2, m_weightCut_step2);
388  float res_step3 = FindPeakFastPV(zProjections,
389  zWeightsSquared,
390  res_step2,
394 
395  float centerWMax = res_step3;
396  //End of PART II
397 
398  //Make the output
399  float res = 0;
400  if (zProjections.size() > 2) {
401  res = centerWMax;
403  e(0, 0) = 0.0015 * 0.0015;
404  e(1, 1) = 0.0015 * 0.0015;
405  e(2, 2) = 1.5 * 1.5;
406  Vertex::Point p(beamSpot->x(res), beamSpot->y(res), res);
407  Vertex thePV(p, e, 1, 1, 0);
408  auto pOut = std::make_unique<reco::VertexCollection>();
409  pOut->push_back(thePV);
410  iEvent.put(std::move(pOut));
411  } else {
413  e(0, 0) = 0.0015 * 0.0015;
414  e(1, 1) = 0.0015 * 0.0015;
415  e(2, 2) = 1.5 * 1.5;
416  Vertex::Point p(beamSpot->x(res), beamSpot->y(res), res);
417  Vertex thePV(p, e, 0, 0, 0);
418  auto pOut = std::make_unique<reco::VertexCollection>();
419  pOut->push_back(thePV);
420  iEvent.put(std::move(pOut));
421  }
422 
423  //Finally, calculate the zClusterQuality as Sum(weights near the fastPV)/sqrt(Sum(total weights)) [a kind of zCluster significance]
424 
425  const float half_width_peak = 1;
426  float nWeightedTot = 0;
427  float nWeightedTotPeak = 0;
428  for (std::vector<float>::iterator it = zProjections.begin(); it != zProjections.end(); it++) {
429  nWeightedTot += zWeights[it - zProjections.begin()];
430  if ((res - half_width_peak) <= (*it) && (*it) <= (res + half_width_peak)) {
431  nWeightedTotPeak += zWeights[it - zProjections.begin()];
432  }
433  }
434 
435  auto zClusterQuality = std::make_unique<float>();
436  *zClusterQuality = -1;
437  if (nWeightedTot != 0) {
438  // where 30 is the beam spot lenght
439  *zClusterQuality = nWeightedTotPeak / sqrt(nWeightedTot / (2 * half_width_peak));
440  iEvent.put(std::move(zClusterQuality));
441  } else
442  iEvent.put(std::move(zClusterQuality));
443 }
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
const_iterator end(bool update=false) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T y() const
Definition: PV3DBase.h:60
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:43
Definition: weight.py:1
int charge() const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
Definition: Electron.h:6
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
const_iterator begin() const
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZPoint Point
point in the space
Definition: Vertex.h:39
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken
virtual VLocalValues localParametersV(const SiPixelCluster &cluster, const GeomDetUnit &gd) const
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetId.h:17
T const * product() const
Definition: Handle.h:69
double x(const double z) const
x coordinate of the beeam spot position at a given z value (it takes into account the dxdz slope) ...
Definition: BeamSpot.h:68
int sizeY() const
Pixel cluster – collection of neighboring pixels above threshold.
fixed size matrix
HLT enums.
double y(const double z) const
y coordinate of the beeam spot position at a given z value (it takes into account the dydz slope) ...
Definition: BeamSpot.h:70
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
T get() const
Definition: EventSetup.h:73
const TrackerGeomDet * idToDet(DetId) const override
double y0() const
y coordinate
Definition: BeamSpot.h:63
const_iterator end() const
float FindPeakFastPV(const std::vector< float > &zProjections, const std::vector< float > &zWeights, const float oldVertex, const float m_zClusterWidth, const float m_zClusterSearchArea, const float m_weightCut)
size_type size() const
Definition: DetSetNew.h:68
int sizeX() const
edm::EDGetTokenT< SiPixelClusterCollectionNew > clustersToken
T x() const
Definition: PV3DBase.h:59
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:511
const_iterator begin(bool update=false) const
double x0() const
x coordinate
Definition: BeamSpot.h:61

Member Data Documentation

edm::EDGetTokenT<reco::BeamSpot> FastPrimaryVertexWithWeightsProducer::beamSpotToken
private
edm::EDGetTokenT<SiPixelClusterCollectionNew> FastPrimaryVertexWithWeightsProducer::clustersToken
private
edm::EDGetTokenT<edm::View<reco::Jet> > FastPrimaryVertexWithWeightsProducer::jetsToken
private
const bool FastPrimaryVertexWithWeightsProducer::m_barrel
private

Definition at line 75 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const edm::InputTag FastPrimaryVertexWithWeightsProducer::m_clusters
private

Definition at line 65 of file FastPrimaryVertexWithWeightsProducer.cc.

const double FastPrimaryVertexWithWeightsProducer::m_EC_weight
private

Definition at line 104 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const bool FastPrimaryVertexWithWeightsProducer::m_endCap
private

Definition at line 98 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_maxDeltaPhi
private

Definition at line 77 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_maxDeltaPhi_EC
private

Definition at line 101 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_maxJetEta
private

Definition at line 73 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_maxJetEta_EC
private

Definition at line 100 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_maxSizeX
private

Definition at line 76 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_maxSizeY_q
private

Definition at line 85 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_maxZ
private

Definition at line 64 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_minJetEta_EC
private

Definition at line 99 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_minJetPt
private

Definition at line 74 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_minSizeY_q
private

Definition at line 83 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const int FastPrimaryVertexWithWeightsProducer::m_njets
private

Definition at line 72 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_peakSizeY_q
private

Definition at line 95 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_PixelCellHeightOverWidth
private

Definition at line 81 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

std::string FastPrimaryVertexWithWeightsProducer::m_pixelCPE
private

Definition at line 66 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const bool FastPrimaryVertexWithWeightsProducer::m_ptWeighting
private

Definition at line 122 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_ptWeighting_offset
private

Definition at line 124 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_ptWeighting_slope
private

Definition at line 123 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weight_charge_down
private

Definition at line 78 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weight_charge_peak
private

Definition at line 93 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weight_charge_up
private

Definition at line 79 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weight_dPhi
private

Definition at line 90 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weight_dPhi_EC
private

Definition at line 105 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weight_rho_up
private

Definition at line 92 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weight_SizeX1
private

Definition at line 91 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weightCut_step2
private

Definition at line 114 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_weightCut_step3
private

Definition at line 119 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_zClusterSearchArea_step2
private

Definition at line 113 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_zClusterSearchArea_step3
private

Definition at line 118 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_zClusterWidth_step1
private

Definition at line 109 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_zClusterWidth_step2
private

Definition at line 112 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

const double FastPrimaryVertexWithWeightsProducer::m_zClusterWidth_step3
private

Definition at line 117 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().