File indexing completed on 2024-04-06 12:33:36
0001 #include "Validation/RecoVertex/interface/VertexWeighter.h"
0002 #include <vector>
0003 #include <cmath>
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005
0006 VertexWeighter::VertexWeighter()
0007 : m_sigma_init(1.), m_mean_init(0.), m_sigma_final(1.), m_usemain(false), m_dummy(true) {}
0008
0009 VertexWeighter::VertexWeighter(const double& sigma_init,
0010 const double& mean_init,
0011 const double& sigma_final,
0012 const bool& usemainvtx)
0013 : m_sigma_init(sigma_init),
0014 m_mean_init(mean_init),
0015 m_sigma_final(sigma_final),
0016 m_usemain(usemainvtx),
0017 m_dummy(false) {}
0018
0019 VertexWeighter::VertexWeighter(const edm::ParameterSet& iConfig)
0020 : m_sigma_init(iConfig.getParameter<double>("initSigma")),
0021 m_mean_init(iConfig.getParameter<double>("initMean")),
0022 m_sigma_final(iConfig.getParameter<double>("finalSigma")),
0023 m_usemain(iConfig.getParameter<bool>("useMainVertex")),
0024 m_dummy(false) {}
0025
0026 const double VertexWeighter::weight(const std::vector<float>& zpositions, const float& zmain) const {
0027 double final_weight = 1.;
0028
0029 if (!m_dummy) {
0030 for (std::vector<float>::const_iterator zpos = zpositions.begin(); zpos != zpositions.end(); ++zpos) {
0031 final_weight *= (m_sigma_init / m_sigma_final) * exp(-pow((*zpos - m_mean_init), 2) / 2. *
0032 (1. / pow(m_sigma_final, 2) - 1. / pow(m_sigma_init, 2)));
0033 }
0034
0035 if (m_usemain) {
0036 final_weight *= (m_sigma_init / m_sigma_final) * exp(-pow((zmain - m_mean_init), 2) / 2. *
0037 (1. / pow(m_sigma_final, 2) - 1. / pow(m_sigma_init, 2)));
0038 }
0039 }
0040
0041 return final_weight;
0042 }