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
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

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
 
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > const m_geomToken
 
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
 
edm::ESGetToken< PixelClusterParameterEstimator, TkPixelCPERecord > const m_pixelCPEToken
 
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<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::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::FastPrimaryVertexWithWeightsProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 129 of file FastPrimaryVertexWithWeightsProducer.cc.

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

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

Member Function Documentation

◆ fillDescriptions()

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

Definition at line 180 of file FastPrimaryVertexWithWeightsProducer.cc.

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, ProducerED_cfi::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

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

◆ produce()

void FastPrimaryVertexWithWeightsProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

if it is a cluster to project

Definition at line 222 of file FastPrimaryVertexWithWeightsProducer.cc.

References funct::abs(), pwdgSkimBPark_cfi::beamSpot, beamSpotToken, ALCARECOTkAlJpsiMuMu_cff::charge, SiPixelCluster::charge(), clustersToken, SiPixelRawToDigiRegional_cfi::deltaPhi, MillePedeFileConverter_cfg::e, PVValHelper::eta, JetChargeProducer_cfi::exp, FindPeakFastPV(), edm::EventSetup::getData(), mps_fire::i, TrackerGeometry::idToDet(), TrackerGeometry::idToDetUnit(), iEvent, ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, dqmiolumiharvest::j, PDWG_EXODelayedJetMET_cff::jets, jetsToken, m_barrel, m_EC_weight, m_endCap, m_geomToken, 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_pixelCPEToken, 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(), DQMOffline_LumiMonitoring_cff::pixelClusters, GeomDet::position(), createTree::pp, edm::Handle< T >::product(), DiDispStaMuonMonitor_cfi::pt, 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(), findQualityFiles::v, HLT_2023v12_cff::weight_dPhi, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), z, and PV3DBase< T, PVType, FrameType >::z().

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

Member Data Documentation

◆ beamSpotToken

edm::EDGetTokenT<reco::BeamSpot> FastPrimaryVertexWithWeightsProducer::beamSpotToken
private

◆ clustersToken

edm::EDGetTokenT<SiPixelClusterCollectionNew> FastPrimaryVertexWithWeightsProducer::clustersToken
private

◆ jetsToken

edm::EDGetTokenT<edm::View<reco::Jet> > FastPrimaryVertexWithWeightsProducer::jetsToken
private

◆ m_barrel

const bool FastPrimaryVertexWithWeightsProducer::m_barrel
private

Definition at line 77 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_clusters

const edm::InputTag FastPrimaryVertexWithWeightsProducer::m_clusters
private

Definition at line 68 of file FastPrimaryVertexWithWeightsProducer.cc.

◆ m_EC_weight

const double FastPrimaryVertexWithWeightsProducer::m_EC_weight
private

Definition at line 106 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_endCap

const bool FastPrimaryVertexWithWeightsProducer::m_endCap
private

Definition at line 100 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_geomToken

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> const FastPrimaryVertexWithWeightsProducer::m_geomToken
private

Definition at line 64 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_maxDeltaPhi

const double FastPrimaryVertexWithWeightsProducer::m_maxDeltaPhi
private

Definition at line 79 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_maxDeltaPhi_EC

const double FastPrimaryVertexWithWeightsProducer::m_maxDeltaPhi_EC
private

Definition at line 103 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_maxJetEta

const double FastPrimaryVertexWithWeightsProducer::m_maxJetEta
private

Definition at line 75 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_maxJetEta_EC

const double FastPrimaryVertexWithWeightsProducer::m_maxJetEta_EC
private

Definition at line 102 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_maxSizeX

const double FastPrimaryVertexWithWeightsProducer::m_maxSizeX
private

Definition at line 78 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_maxSizeY_q

const double FastPrimaryVertexWithWeightsProducer::m_maxSizeY_q
private

Definition at line 87 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_maxZ

const double FastPrimaryVertexWithWeightsProducer::m_maxZ
private

Definition at line 67 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_minJetEta_EC

const double FastPrimaryVertexWithWeightsProducer::m_minJetEta_EC
private

Definition at line 101 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_minJetPt

const double FastPrimaryVertexWithWeightsProducer::m_minJetPt
private

Definition at line 76 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_minSizeY_q

const double FastPrimaryVertexWithWeightsProducer::m_minSizeY_q
private

Definition at line 85 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_njets

const int FastPrimaryVertexWithWeightsProducer::m_njets
private

Definition at line 74 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_peakSizeY_q

const double FastPrimaryVertexWithWeightsProducer::m_peakSizeY_q
private

Definition at line 97 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_PixelCellHeightOverWidth

const double FastPrimaryVertexWithWeightsProducer::m_PixelCellHeightOverWidth
private

Definition at line 83 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_pixelCPEToken

edm::ESGetToken<PixelClusterParameterEstimator, TkPixelCPERecord> const FastPrimaryVertexWithWeightsProducer::m_pixelCPEToken
private

Definition at line 65 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_ptWeighting

const bool FastPrimaryVertexWithWeightsProducer::m_ptWeighting
private

Definition at line 124 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_ptWeighting_offset

const double FastPrimaryVertexWithWeightsProducer::m_ptWeighting_offset
private

Definition at line 126 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_ptWeighting_slope

const double FastPrimaryVertexWithWeightsProducer::m_ptWeighting_slope
private

Definition at line 125 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weight_charge_down

const double FastPrimaryVertexWithWeightsProducer::m_weight_charge_down
private

Definition at line 80 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weight_charge_peak

const double FastPrimaryVertexWithWeightsProducer::m_weight_charge_peak
private

Definition at line 95 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weight_charge_up

const double FastPrimaryVertexWithWeightsProducer::m_weight_charge_up
private

Definition at line 81 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weight_dPhi

const double FastPrimaryVertexWithWeightsProducer::m_weight_dPhi
private

Definition at line 92 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weight_dPhi_EC

const double FastPrimaryVertexWithWeightsProducer::m_weight_dPhi_EC
private

Definition at line 107 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weight_rho_up

const double FastPrimaryVertexWithWeightsProducer::m_weight_rho_up
private

Definition at line 94 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weight_SizeX1

const double FastPrimaryVertexWithWeightsProducer::m_weight_SizeX1
private

Definition at line 93 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weightCut_step2

const double FastPrimaryVertexWithWeightsProducer::m_weightCut_step2
private

Definition at line 116 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_weightCut_step3

const double FastPrimaryVertexWithWeightsProducer::m_weightCut_step3
private

Definition at line 121 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_zClusterSearchArea_step2

const double FastPrimaryVertexWithWeightsProducer::m_zClusterSearchArea_step2
private

Definition at line 115 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_zClusterSearchArea_step3

const double FastPrimaryVertexWithWeightsProducer::m_zClusterSearchArea_step3
private

Definition at line 120 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_zClusterWidth_step1

const double FastPrimaryVertexWithWeightsProducer::m_zClusterWidth_step1
private

Definition at line 111 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_zClusterWidth_step2

const double FastPrimaryVertexWithWeightsProducer::m_zClusterWidth_step2
private

Definition at line 114 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().

◆ m_zClusterWidth_step3

const double FastPrimaryVertexWithWeightsProducer::m_zClusterWidth_step3
private

Definition at line 119 of file FastPrimaryVertexWithWeightsProducer.cc.

Referenced by produce().