CMS 3D CMS Logo

FastPrimaryVertexWithWeightsProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FastPrimaryVertexWithWeightsProducer
4 // Class: FastPrimaryVertexWithWeightsProducer
5 //
14 //
15 // Original Author: Silvio DONATO
16 // Created: Wed Dec 18 10:05:40 CET 2013
17 //
18 //
19 
20 // system include files
21 #include <memory>
22 #include <vector>
23 #include <cmath>
24 // user include files
33 
44 
49 
51 
53 
54 using namespace std;
55 
57 public:
59  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
60 
61 private:
62  void produce(edm::Event&, const edm::EventSetup&) override;
63 
64  const double m_maxZ; // Use only pixel clusters with |z| < maxZ
65  const edm::InputTag m_clusters; // PixelClusters InputTag
66  std::string m_pixelCPE; // PixelCPE (PixelClusterParameterEstimator)
70 
71  // PARAMETERS USED IN THE BARREL PIXEL CLUSTERS PROJECTION
72  const int m_njets; // Use only the first njets
73  const double m_maxJetEta; // Use only jets with |eta| < maxJetEta
74  const double m_minJetPt; // Use only jets with Pt > minJetPt
75  const bool m_barrel; // Use clusters from pixel endcap
76  const double m_maxSizeX; // Use only pixel clusters with sizeX <= maxSizeX
77  const double m_maxDeltaPhi; // Use only pixel clusters with DeltaPhi(Jet,Cluster) < maxDeltaPhi
78  const double m_weight_charge_down; // Use only pixel clusters with ClusterCharge > weight_charge_down
79  const double m_weight_charge_up; // Use only pixel clusters with ClusterCharge < weight_charge_up
80  //It is the ratio between pixel cell height and width along z coordinate about 285µm/150µm=1.9
82  // Use only pixel clusters with sizeY > PixelCellHeightOverWidth * |jetZOverRho| + minSizeY_q
83  const double m_minSizeY_q;
84  // Use only pixel clusters with sizeY < PixelCellHeightOverWidth * |jetZOverRho| + maxSizeY_q
85  const double m_maxSizeY_q;
86 
87  // PARAMETERS USED TO WEIGHT THE BARREL PIXEL CLUSTERS
88  // The cluster weight is defined as weight = weight_dPhi * weight_sizeY * weight_rho * weight_sizeX1 * weight_charge
89 
90  const double m_weight_dPhi; // used in weight_dPhi = exp(-|DeltaPhi(JetCluster)|/m_weight_dPhi)
91  const double m_weight_SizeX1; // used in weight_SizeX1 = (ClusterSizeX==2)*1+(ClusterSizeX==1)*m_weight_SizeX1;
92  const double m_weight_rho_up; // used in weight_rho = (m_weight_rho_up - ClusterRho)/m_weight_rho_up
93  const double m_weight_charge_peak; // Give the maximum weight_charge for a cluster with Charge = m_weight_charge_peak
94  // Give the maximum weight_sizeY for a cluster with sizeY = PixelCellHeightOverWidth * |jetZOverRho| + peakSizeY_q
95  const double m_peakSizeY_q;
96 
97  // PARAMETERS USED IN THE ENDCAP PIXEL CLUSTERS PROJECTION
98  const bool m_endCap; // Use clusters from pixel endcap
99  const double m_minJetEta_EC; // Use only jets with |eta| > minJetEta_EC
100  const double m_maxJetEta_EC; // Use only jets with |eta| < maxJetEta_EC
101  const double m_maxDeltaPhi_EC; // Use only pixel clusters with DeltaPhi(Jet,Cluster) < maxDeltaPhi_EC
102 
103  // PARAMETERS USED TO WEIGHT THE ENDCAP PIXEL CLUSTERS
104  const double m_EC_weight; // In EndCap the weight is defined as weight = m_EC_weight*(weight_dPhi)
105  const double m_weight_dPhi_EC; // Used in weight_dPhi = exp(-|DeltaPhi|/m_weight_dPhi_EC )
106 
107  // PARAMETERS USED TO FIND THE FASTPV AS PEAK IN THE Z-PROJECTIONS DISTRIBUTION
108  // First Iteration: look for a cluster with a width = m_zClusterWidth_step1
109  const double m_zClusterWidth_step1; // cluster width in step1
110 
111  // Second Iteration: use only z-projections with weight > weightCut_step2 and look for a cluster with a width = m_zClusterWidth_step2, within of weightCut_step2 of the previous result
112  const double m_zClusterWidth_step2; // cluster width in step2
113  const double m_zClusterSearchArea_step2; // cluster width in step2
114  const double m_weightCut_step2; // minimum z-projections weight required in step2
115 
116  // Third Iteration: use only z-projections with weight > weightCut_step3 and look for a cluster with a width = m_zClusterWidth_step3, within of weightCut_step3 of the previous result
117  const double m_zClusterWidth_step3; // cluster width in step3
118  const double m_zClusterSearchArea_step3; // cluster width in step3
119  const double m_weightCut_step3; // minimum z-projections weight required in step3
120 
121  // use the jetPt weighting
122  const bool m_ptWeighting; // use weight=weight*pt_weigth ?;
123  const double m_ptWeighting_slope; // pt_weigth= pt*ptWeighting_slope +m_ptWeighting_offset;
124  const double m_ptWeighting_offset; //
125 };
126 
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 }
177 
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 }
219 
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 }
444 
445 //define this as a plug-in
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
T getParameter(std::string const &) const
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
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
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.
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
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
ParameterDescriptionBase * add(U const &iLabel, T const &value)
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
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
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
void add(std::string const &label, ParameterSetDescription const &psetDescription)
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
void produce(edm::Event &, const edm::EventSetup &) override
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