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 
66 
67  const double m_maxZ; // Use only pixel clusters with |z| < maxZ
68  const edm::InputTag m_clusters; // PixelClusters InputTag
72 
73  // PARAMETERS USED IN THE BARREL PIXEL CLUSTERS PROJECTION
74  const int m_njets; // Use only the first njets
75  const double m_maxJetEta; // Use only jets with |eta| < maxJetEta
76  const double m_minJetPt; // Use only jets with Pt > minJetPt
77  const bool m_barrel; // Use clusters from pixel endcap
78  const double m_maxSizeX; // Use only pixel clusters with sizeX <= maxSizeX
79  const double m_maxDeltaPhi; // Use only pixel clusters with DeltaPhi(Jet,Cluster) < maxDeltaPhi
80  const double m_weight_charge_down; // Use only pixel clusters with ClusterCharge > weight_charge_down
81  const double m_weight_charge_up; // Use only pixel clusters with ClusterCharge < weight_charge_up
82  //It is the ratio between pixel cell height and width along z coordinate about 285µm/150µm=1.9
84  // Use only pixel clusters with sizeY > PixelCellHeightOverWidth * |jetZOverRho| + minSizeY_q
85  const double m_minSizeY_q;
86  // Use only pixel clusters with sizeY < PixelCellHeightOverWidth * |jetZOverRho| + maxSizeY_q
87  const double m_maxSizeY_q;
88 
89  // PARAMETERS USED TO WEIGHT THE BARREL PIXEL CLUSTERS
90  // The cluster weight is defined as weight = weight_dPhi * weight_sizeY * weight_rho * weight_sizeX1 * weight_charge
91 
92  const double m_weight_dPhi; // used in weight_dPhi = exp(-|DeltaPhi(JetCluster)|/m_weight_dPhi)
93  const double m_weight_SizeX1; // used in weight_SizeX1 = (ClusterSizeX==2)*1+(ClusterSizeX==1)*m_weight_SizeX1;
94  const double m_weight_rho_up; // used in weight_rho = (m_weight_rho_up - ClusterRho)/m_weight_rho_up
95  const double m_weight_charge_peak; // Give the maximum weight_charge for a cluster with Charge = m_weight_charge_peak
96  // Give the maximum weight_sizeY for a cluster with sizeY = PixelCellHeightOverWidth * |jetZOverRho| + peakSizeY_q
97  const double m_peakSizeY_q;
98 
99  // PARAMETERS USED IN THE ENDCAP PIXEL CLUSTERS PROJECTION
100  const bool m_endCap; // Use clusters from pixel endcap
101  const double m_minJetEta_EC; // Use only jets with |eta| > minJetEta_EC
102  const double m_maxJetEta_EC; // Use only jets with |eta| < maxJetEta_EC
103  const double m_maxDeltaPhi_EC; // Use only pixel clusters with DeltaPhi(Jet,Cluster) < maxDeltaPhi_EC
104 
105  // PARAMETERS USED TO WEIGHT THE ENDCAP PIXEL CLUSTERS
106  const double m_EC_weight; // In EndCap the weight is defined as weight = m_EC_weight*(weight_dPhi)
107  const double m_weight_dPhi_EC; // Used in weight_dPhi = exp(-|DeltaPhi|/m_weight_dPhi_EC )
108 
109  // PARAMETERS USED TO FIND THE FASTPV AS PEAK IN THE Z-PROJECTIONS DISTRIBUTION
110  // First Iteration: look for a cluster with a width = m_zClusterWidth_step1
111  const double m_zClusterWidth_step1; // cluster width in step1
112 
113  // 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
114  const double m_zClusterWidth_step2; // cluster width in step2
115  const double m_zClusterSearchArea_step2; // cluster width in step2
116  const double m_weightCut_step2; // minimum z-projections weight required in step2
117 
118  // 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
119  const double m_zClusterWidth_step3; // cluster width in step3
120  const double m_zClusterSearchArea_step3; // cluster width in step3
121  const double m_weightCut_step3; // minimum z-projections weight required in step3
122 
123  // use the jetPt weighting
124  const bool m_ptWeighting; // use weight=weight*pt_weigth ?;
125  const double m_ptWeighting_slope; // pt_weigth= pt*ptWeighting_slope +m_ptWeighting_offset;
126  const double m_ptWeighting_offset; //
127 };
128 
130  : m_geomToken(esConsumes()),
131  m_pixelCPEToken(esConsumes(edm::ESInputTag("", iConfig.getParameter<std::string>("pixelCPE")))),
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 }
179 
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 }
221 
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 }
441 
442 //define this as a plug-in
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
T z() const
Definition: PV3DBase.h:61
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > const m_geomToken
T const * product() const
Definition: Handle.h:70
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
math::Error< dimension >::type Error
covariance error matrix (3x3)
Definition: Vertex.h:44
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
bool getData(T &iHolder) const
Definition: EventSetup.h:122
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
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
size_type size() const
Definition: DetSetNew.h:68
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:86
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
void produce(edm::Event &, const edm::EventSetup &) override
def move(src, dest)
Definition: eostools.py:511