4#include "Math/ProbFunc.h"
6#include "fastjet/Selector.hh"
19Puppi::Puppi(
double R0,
double Rmin,
double beta,
double centralPTCutOffset,
double centralPTCutSlope,
double forwardPTCutOffset,
double forwardPTCutSlope,
double etaBoundary):
26void Puppi::setParticles(
const std::vector<fastjet::PseudoJet>& chargedHS,
const std::vector<fastjet::PseudoJet>& chargedPU,
const std::vector<fastjet::PseudoJet>& neutral,
const std::vector<fastjet::PseudoJet>& forward,
int nPV){
57 chi2Total=fabs(chi2Total);
64 double w = ROOT::Math::chisquared_cdf(chi2Total, nDF);
76 w*=(pfo.pt()>offset+
m_nPV*slope);
84 fastjet::Selector
sel = fastjet::SelectorCircle(
m_R0);
85 sel.set_reference(pfo);
92 for (
const auto& p: chargedHSNeighbors){
93 float dR=pfo.delta_R(p);
103 vector<fastjet::PseudoJet> neutralNeighbors =
sel(
m_neutral);
104 for (
const auto& p: neutralNeighbors){
105 float dR=pfo.delta_R(p);
115 vector<fastjet::PseudoJet> forwardNeighbors =
sel(
m_forward);
116 for (
const auto& p: forwardNeighbors){
117 float dR=pfo.delta_R(p);
125 if (sum<=FLT_MIN)
return -99999;
126 if (nNeighbors!=0)
return log(sum);
134 vector<double> values;
142 if(value > -999) values.push_back(value);
147 if(!values.empty())
m_median=values[int(values.size()*0.5)];
153 for(
auto value: values){
159 if(n > 0)
m_rms = TMath::Sqrt(sum/n);
constexpr int pow(int base, int exp) noexcept
std::vector< double > otherChi2Vec
std::vector< fastjet::PseudoJet > m_chargedHS
bool m_includeCentralNeutralsInAlpha
std::vector< fastjet::PseudoJet > m_neutral
double m_centralPTCutSlope
Puppi(double R0, double Rmin, double beta, double centralPTCutOffset, double centralPTCutSlope, double forwardPTCutOffset, double forwardPTCutSlope, double etaBoundary)
void findAlphaMedianAndRMS()
std::vector< std::vector< fastjet::PseudoJet > * > m_allParticles
void setParticles(const std::vector< fastjet::PseudoJet > &chargedHS, const std::vector< fastjet::PseudoJet > &chargedPU, const std::vector< fastjet::PseudoJet > &neutral, const std::vector< fastjet::PseudoJet > &forward, int nPU)
double getAlpha(const fastjet::PseudoJet &pfo)
std::vector< fastjet::PseudoJet > m_forward
double m_centralPTCutOffset
std::vector< fastjet::PseudoJet > m_chargedPU
double getWeight(const fastjet::PseudoJet &pfo)
double getChi2(const fastjet::PseudoJet &pfo)
double m_forwardPTCutOffset
double m_forwardPTCutSlope
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.