224 using namespace reco;
227 const float barrel_lenght = 30;
263 std::vector<float> zProjections;
264 std::vector<float> zWeights;
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();
278 DetId id = it->detId();
281 float zmodule = modulepos.
z() -
285 for (
size_t j = 0;
j < detset.
size();
j++) {
298 pp->localParametersV(aCluster, (*trackerGeometry->idToDetUnit(
id)))[0].first);
309 zProjections.push_back(z);
312 if (
std::abs(modulepos.
z()) < barrel_lenght) {
314 float sizeY = aCluster.
sizeY();
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;
325 float rho =
sqrt(v_bs.x() * v_bs.x() + v_bs.y() * v_bs.y());
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;
344 weight = weight_dPhi * weight_sizeY * weight_rho * weight_sizeX1 * weight_charge;
345 }
else if (
std::abs(modulepos.
z()) > barrel_lenght)
353 weight = weight * pt_weight;
354 zWeights.push_back(weight);
365 std::multimap<float, float> zWithW;
367 for (
i = 0;
i < zProjections.size();
i++)
368 zWithW.insert(std::pair<float, float>(zProjections[
i], zWeights[i]));
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;
376 std::vector<float> zWeightsSquared;
377 for (std::vector<float>::iterator it = zWeights.begin(); it != zWeights.end(); it++) {
378 zWeightsSquared.push_back((*it) * (*it));
392 float centerWMax = res_step3;
397 if (zProjections.size() > 2) {
400 e(0, 0) = 0.0015 * 0.0015;
401 e(1, 1) = 0.0015 * 0.0015;
405 auto pOut = std::make_unique<reco::VertexCollection>();
406 pOut->push_back(thePV);
410 e(0, 0) = 0.0015 * 0.0015;
411 e(1, 1) = 0.0015 * 0.0015;
415 auto pOut = std::make_unique<reco::VertexCollection>();
416 pOut->push_back(thePV);
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()];
432 auto zClusterQuality = std::make_unique<float>();
433 *zClusterQuality = -1;
434 if (nWeightedTot != 0) {
436 *zClusterQuality = nWeightedTotPeak /
sqrt(nWeightedTot / (2 * half_width_peak));
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
const double m_weightCut_step2
const double m_weightCut_step3
const double m_weight_charge_down
const double m_weight_dPhi_EC
const double m_maxJetEta_EC
const double m_weight_charge_up
const double m_zClusterWidth_step3
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const double m_maxDeltaPhi_EC
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > const m_geomToken
Geom::Phi< T > phi() const
math::Error< dimension >::type Error
covariance error matrix (3x3)
const double m_zClusterWidth_step2
const double m_weight_charge_peak
Exp< T >::type exp(const T &t)
const double m_PixelCellHeightOverWidth
const double m_weight_dPhi
bool getData(T &iHolder) const
const double m_ptWeighting_slope
const double m_weight_SizeX1
const double m_peakSizeY_q
Abs< T >::type abs(const T &t)
math::XYZPoint Point
point in the space
const double m_weight_rho_up
edm::EDGetTokenT< edm::View< reco::Jet > > jetsToken
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const double m_zClusterSearchArea_step3
Pixel cluster – collection of neighboring pixels above threshold.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
const double m_maxDeltaPhi
const double m_zClusterSearchArea_step2
const double m_ptWeighting_offset
const double m_maxSizeY_q
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
const double m_zClusterWidth_step1
const double m_minSizeY_q
const double m_minJetEta_EC