7#include "fastjet/ClusterSequenceArea.hh"
8#include "fastjet/Selector.hh"
9#include "fastjet/RectangularGrid.hh"
10#include "fastjet/contrib/SoftKiller.hh"
53 ATH_MSG_ERROR(
"SoftKillerWeightTool requires CaloCluster or PFO inputs when isCaloSplit is true."
54 <<
" It cannot apply split calorimeters on objects of type "
56 return StatusCode::FAILURE;
61 ATH_MSG_ERROR(
"Incompatible configuration: setting both IgnoreChargedPFO and ApplyToChargedPFO to true"
62 <<
"will set all cPFOs to zero");
63 return StatusCode::FAILURE;
66 ATH_MSG_ERROR(
"Incompatible configuration: ApplyToNeutralPFO=False -- what kind of pileup do you wish to suppress?");
67 return StatusCode::FAILURE;
70 return StatusCode::SUCCESS;
75 double minPt(0.), minPtECal(0.), minPtHCal(0.);
82 minPtECal = minPt_split.first;
83 minPtHCal = minPt_split.second;
84 ATH_MSG_VERBOSE(
"For current event, minpt = " << minPtECal <<
" (ECAL), "
85 << minPtHCal <<
" (HCAL)");
95 return StatusCode::SUCCESS;
103 if (partSK.empty()) {
return 0.;}
104 double minPt = 999999999999;
106 for(
unsigned int i=0; i < partSK.size(); i++){
107 if( partSK[i].pt() < minPt) minPt = partSK[i].pt();
111 return (minPt - 1e-12);
118 vector<fastjet::PseudoJet> partPJ;
119 partPJ.reserve(cont.
size());
123 bool accept = part->e() > 1e-9;
133 accept = (tcc->
taste()!= 0);
144 partPJ.emplace_back( part->p4() );
148 fastjet::Selector selector = fastjet::SelectorAbsRapRange(
m_rapmin,
m_rapmax);
150 fastjet::contrib::SoftKiller softkiller(SKgrid);
151 std::vector<fastjet::PseudoJet> partSK = softkiller(selector(partPJ));
157 vector<fastjet::PseudoJet> partPJ_ECal;
158 partPJ_ECal.reserve(cont.
size());
159 vector<fastjet::PseudoJet> partPJ_HCal;
160 partPJ_HCal.reserve(cont.
size());
164 bool accept = part->e() > 1e-9;
174 accept = (tcc->
taste()!= 0);
185 double center_lambda = acc_clambda.isAvailable(*part) ? acc_clambda(*part) : 0.;
191 fastjet::Selector selector = fastjet::SelectorAbsRapRange(
m_rapmin,
m_rapmax);
193 fastjet::contrib::SoftKiller softkillerECal(SKgridECal);
194 std::vector<fastjet::PseudoJet> partSK_ECal = softkillerECal(selector(partPJ_ECal));
195 double minPtECal =
findMinPt(partSK_ECal);
198 fastjet::contrib::SoftKiller softkillerHCal(SKgridHCal);
199 std::vector<fastjet::PseudoJet> partSK_HCal = softkillerHCal(selector(partPJ_HCal));
200 double minPtHCal =
findMinPt(partSK_HCal);
201 return std::make_pair(minPtECal,minPtHCal);
207 if( part.pt() < minPt)
return 0;
214 double center_lambda = acc_clambda.isAvailable(part) ? acc_clambda(part) : 0.;
218 if( part.pt() < minPtHCal)
return 0;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
size_type size() const noexcept
Returns the number of elements in the collection.
JetConstituentModifierBase(const std::string &name)
StatusCode setEnergyPt(xAOD::IParticle *obj, float e, float pt, const SG::AuxElement::Accessor< float > *weightAcc=nullptr) const
SG::ConstAccessor< T, ALLOC > ConstAccessor
SG::Accessor< T, ALLOC > Accessor
signal_t signalType() const
Class providing the definition of the 4-vector interface.
bool isCharged() const
is a charged PFO
virtual int taste() const
The taste of the particle.
@ ParticleFlow
The object is a particle-flow object.
@ FlowElement
The object is a track-calo-cluster.
@ CaloCluster
The object is a calorimeter cluster.
@ TrackCaloCluster
The object is a track-calo-cluster.
PFO_v1 PFO
Definition of the current "pfo version".
FlowElement_v1 FlowElement
Definition of the current "pfo version".
TrackCaloCluster_v1 TrackCaloCluster
Reference the current persistent version:
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.