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")),
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")),
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")),
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")),
159 m_zClusterWidth_step1(iConfig.getParameter<double>(
"zClusterWidth_step1")),
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")),
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")),
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")) {
176 produces<reco::VertexCollection>();
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);
217 desc.add<
double>(
"ptWeighting_slope", 1 / 20.);
218 desc.add<
double>(
"ptWeighting_offset", -1);
219 descriptions.
add(
"fastPrimaryVertexWithWeightsProducer",
desc);
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) {
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)
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));