7 #include "fastjet/ClusterSequenceArea.hh"
8 #include "fastjet/Selector.hh"
9 #include "fastjet/RectangularGrid.hh"
10 #include "fastjet/contrib/SoftKiller.hh"
24 , m_lambdaCalDivide(317)
25 , m_isCaloSplit(false)
33 , m_ignoreChargedPFOs(true)
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 - 1
e-12);
118 vector<fastjet::PseudoJet> partPJ;
119 partPJ.reserve(cont.
size());
144 partPJ.emplace_back(
part->p4() );
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());
185 double center_lambda = acc_clambda.isAvailable(*
part) ? acc_clambda(*
part) : 0.;
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;