31 #include "fastjet/tools/Subtractor.hh"
37 FASTJET_BEGIN_NAMESPACE
62 throw Error(
"Trying to subtract a jet without area support");
65 PseudoJet known_lv, known_pu;
66 PseudoJet unknown = jet;
72 vector<PseudoJet> constits_unknown, constits_known;
76 vector<PseudoJet> constits_known_lv, constits_known_pu;
84 known_lv = (constits_known_lv.size()!=0)
85 ? SelectorIdentity().
sum(constits_known_lv) : 0.0*jet;
86 known_pu = (constits_known_pu.size()!=0)
87 ? SelectorIdentity().
sum(constits_known_pu) : 0.0*jet;
88 if (constits_unknown.size()==0){
90 PseudoJet subtracted_jet = jet;
92 return subtracted_jet;
95 unknown.reset_momentum(SelectorIdentity().sum(constits_unknown));
104 PseudoJet subtracted_jet = jet;
108 if (to_subtract.pt2() < jet.pt2() ) {
111 subtracted_jet -= to_subtract;
115 subtracted_jet.reset_momentum(known_lv);
116 return subtracted_jet;
121 if (subtracted_jet.pt2() < known_lv.pt2()){
122 subtracted_jet.reset_momentum(known_lv);
123 return subtracted_jet;
127 if ((
_safe_mass) && (subtracted_jet.m2() < known_lv.m2())){
132 subtracted_jet.reset_momentum(PtYPhiM(subtracted_jet.pt(),
134 subtracted_jet.phi(),
138 return subtracted_jet;
144 string desc =
"Subtractor that uses the following background estimator to determine rho: "+
_bge->description();
145 if (
use_rho_m()) desc +=
"; including the rho_m correction";
146 if (
safe_mass()) desc +=
"; including mass safety tests";
153 ostr <<
"Subtractor that uses a fixed value of rho = " <<
_rho;
156 return "Uninitialised subtractor";
167 rho =
_bge->rho(jet);
171 throw Error(
"default Subtractor does not have any information about the background, which is needed to perform the subtraction");
174 PseudoJet area = jet.area_4vector();
175 PseudoJet to_subtract = rho*area;
177 double const rho_m_warning_threshold = 1e-5;
182 to_subtract +=
_bge->rho_m(jet) * PseudoJet(0.0, 0.0, area.pz(), area.E());
185 _bge->rho_m(jet) > rho_m_warning_threshold * rho) {
186 _unused_rho_m_warning.warn(
"Background estimator indicates non-zero rho_m, but use_rho_m()==false in subtractor; consider calling set_use_rho_m(true) to include the rho_m information");
193 FASTJET_END_NAMESPACE