28 #include "fftjet/VectorRecombinationAlgFactory.hh"
29 #include "fftjet/RecombinationAlgFactory.hh"
64 #define make_param(type, varname) const \
65 type & varname (ps.getParameter< type >( #varname ))
67 #define init_param(type, varname) varname (ps.getParameter< type >( #varname ))
76 #define jet_type_switch(method, arg1, arg2) do {\
80 method <reco::CaloJet> ( arg1 , arg2 );\
83 method <reco::PFJet> ( arg1 , arg2 );\
86 method <reco::GenJet> ( arg1 , arg2 );\
89 method <reco::TrackJet> ( arg1 , arg2 );\
92 method <reco::BasicJet> ( arg1 , arg2 );\
95 assert(!"ERROR in FFTJetProducer : invalid jet type."\
96 " This is a bug. Please report.");\
104 inline bool operator()(
const Jet&
l,
const Jet&
r)
const
105 {
return l.pt() > r.pt();}
109 using namespace fftjetcms;
114 if (!name.compare(
"fixed"))
116 else if (!name.compare(
"maximallyStable"))
117 return MAXIMALLY_STABLE;
118 else if (!name.compare(
"globallyAdaptive"))
119 return GLOBALLY_ADAPTIVE;
120 else if (!name.compare(
"locallyAdaptive"))
121 return LOCALLY_ADAPTIVE;
122 else if (!name.compare(
"fromGenJets"))
126 <<
"Invalid resolution specification \""
127 << name <<
"\"" << std::endl;
131 template <
typename T>
135 produces<std::vector<reco::FFTAnyJet<T> > >(
tag).setBranchAlias(alias);
148 init_param(unsigned, nJetsRequiredToConverge),
179 iterationsPerformed(1U),
185 <<
"Can't resum constituents if they are not assigned"
188 produces<reco::FFTJetProducerSummary>(
outputLabel);
224 if (!input->isSparse())
226 <<
"The stored clustering tree is not sparse" << std::endl;
237 const fftjet::Functor1<bool,fftjet::Peak>& peakSelect,
238 std::vector<fftjet::Peak>* preclusters)
246 const unsigned sz = input->size();
247 preclusters->reserve(sz);
248 for (
unsigned i=0;
i<sz; ++
i)
251 fftjet::Peak
p(jet.precluster());
252 const double scale(
p.scale());
253 p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
257 preclusters->push_back(
p);
264 const fftjet::Functor1<bool,fftjet::Peak>& peakSelect,
265 std::vector<fftjet::Peak>* preclusters)
271 const unsigned nNodes =
nodes.size();
272 const SparseTree::NodeId* pnodes = nNodes ? &
nodes[0] : 0;
273 preclusters->reserve(nNodes);
274 for (
unsigned i=0;
i<nNodes; ++
i)
275 preclusters->push_back(
280 fftjet::Peak* clusters = nNodes ? &(*preclusters)[0] : 0;
281 for (
unsigned i=0; i<nNodes; ++
i)
283 clusters[
i].setCode(pnodes[i]);
291 const fftjet::Functor1<bool,fftjet::Peak>& peakSelect,
292 std::vector<SparseTree::NodeId>* mynodes)
303 tree.getPassingNodes(
usedLevel, peakSelect, mynodes);
314 if (tree.stableClusterCount(
316 minStartingLevel, maxStartingLevel))
319 tree.getPassingNodes(
usedLevel, peakSelect, mynodes);
326 const bool stable = tree.clusterCountLevels(
333 const int maxlev = tree.maxStoredLevel();
334 bool levelFound =
false;
336 for (
int ifac=1; ifac>-2 && !levelFound; ifac-=2)
339 if (level > 0 && level <= maxlev)
357 const unsigned maxlev = tree.maxStoredLevel();
369 const unsigned d = nClustersRequested > n ?
380 tree.getPassingNodes(
usedLevel, peakSelect, mynodes);
393 assert(!
"ERROR in FFTJetProducer::selectTreeNodes : "
394 "should never get here! This is a bug. Please report.");
405 fftjet::Functor1<double,fftjet::Peak>&
407 fftjet::Functor1<double,fftjet::Peak>&
409 fftjet::Functor1<double,fftjet::Peak>&
412 for (
unsigned i=0;
i<nClus; ++
i)
414 clus[
i].setRecoScale(scaleCalc(clus[
i]));
415 clus[
i].setRecoScaleRatio(ratioCalc(clus[i]));
416 clus[
i].setMembershipFactor(factorCalc(clus[i]));
431 fftjet::DefaultRecombinationAlgFactory<
435 <<
"Invalid grid recombination algorithm \""
437 gridAlg = std::auto_ptr<GridAlg>(
448 std::auto_ptr<fftjet::Grid2d<fftjetcms::Real> >& flow)
454 bool rebuildGrid = flow.get() ==
NULL;
457 !(flow->nEta() == input->nEtaBins() &&
458 flow->nPhi() == input->nPhiBins() &&
459 flow->etaMin() == input->etaMin() &&
460 flow->etaMax() == input->etaMax() &&
461 flow->phiBin0Edge() == input->phiBin0Edge());
465 flow = std::auto_ptr<fftjet::Grid2d<Real> >(
466 new fftjet::Grid2d<Real>(
467 input->nEtaBins(), input->etaMin(), input->etaMax(),
468 input->nPhiBins(), input->phiBin0Edge(), input->title()));
470 flow->blockSet(input->data(), input->nEtaBins(), input->nPhiBins());
476 std::vector<RecoFFTJet>& nextSet)
478 fftjet::Functor2<double,RecoFFTJet,RecoFFTJet>&
481 const unsigned nJets = previous.size();
482 if (nJets != nextSet.size())
489 bool converged =
true;
490 for (
unsigned i=0;
i<nJets; ++
i)
492 const double d = distanceCalc(prev[
i], next[i]);
493 next[
i].setConvergenceDistance(d);
509 unsigned iterNum = 1U;
510 bool converged =
false;
517 for (
unsigned i=0;
i<nJets; ++
i)
520 fftjet::Peak
p(jet.precluster());
521 p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
522 p.setRecoScale(scaleCalc(jet));
523 p.setRecoScaleRatio(ratioCalc(jet));
524 p.setMembershipFactor(factorCalc(jet));
539 <<
"FFTJet algorithm failed" << std::endl;
562 for (
unsigned i=0;
i<nJets; ++
i)
565 jets[
i].setPeakEtaPhi(oldp.eta(), oldp.phi());
581 const unsigned nJets =
recoJets.size();
582 const unsigned* clusterMask =
gridAlg->getClusterMask();
583 const int nEta =
gridAlg->getLastNEta();
584 const int nPhi =
gridAlg->getLastNPhi();
587 const unsigned nInputs =
eventData.size();
590 for (
unsigned i=0;
i<nInputs; ++
i)
593 const int iPhi = g.getPhiBin(item.Phi());
594 const int iEta = g.getEtaBin(item.Eta());
595 const unsigned mask = iEta >= 0 && iEta < nEta ?
596 clusterMask[iEta*nPhi + iPhi] : 0;
597 assert(mask <= nJets);
605 const unsigned nJets =
recoJets.size();
606 const unsigned* clusterMask =
recoAlg->getClusterMask();
607 const unsigned maskLength =
recoAlg->getLastNData();
611 for (
unsigned i=0;
i<maskLength; ++
i)
617 const unsigned mask = clusterMask[
i];
618 assert(mask <= nJets);
626 template <
typename T>
630 using namespace reco;
648 const unsigned nJets =
recoJets.size();
649 jets->reserve(nJets);
652 double previousPt = DBL_MAX;
653 for (
unsigned ijet=0; ijet<nJets; ++ijet)
664 for (
unsigned i=0;
i<nCon; ++
i)
689 double ncells = myjet.ncells();
695 jet.setJetArea(cellArea*ncells);
705 jets->push_back(OutputJet(jet, fj));
708 const double pt = jet.pt();
716 std::sort(jets->begin(), jets->end(), LocalSortByPt());
724 const unsigned nPreclustersFound)
736 for (
unsigned i=0;
i<nCon; ++
i)
746 std::auto_ptr<reco::FFTJetProducerSummary>
summary(
750 minScale, maxScale, scaleUsed,
764 loadSparseTreeData<float>(
iEvent);
766 loadSparseTreeData<double>(
iEvent);
809 unsigned nPreclustersFound = 0U;
811 for (
unsigned i=0;
i<npre; ++
i)
826 <<
"FFTJet algorithm failed (first iteration)" << std::endl;
836 const unsigned nJets =
recoJets.size();
849 const unsigned nJets =
recoJets.size();
854 for (
unsigned i=0;
i<=nJets; ++
i)
880 std::auto_ptr<fftjet::Functor1<bool,fftjet::Peak> >
889 std::auto_ptr<fftjet::ScaleSpaceKernel>
898 std::auto_ptr<AbsBgFunctor>
907 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
916 std::auto_ptr<fftjetcms::AbsPileupCalculator>
925 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
934 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
942 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
950 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
958 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
966 std::auto_ptr<fftjet::Functor2<
998 fftjet::DefaultVectorRecombinationAlgFactory<
1002 <<
"Invalid vector recombination algorithm \""
1004 recoAlg = std::auto_ptr<RecoAlg>(
1036 "reconstruction scale calculator from peaks");
1041 "reconstruction scale ratio calculator from peaks");
1046 "membership function factor calculator from peaks");
1053 "reconstruction scale calculator from jets");
1057 "reconstruction scale ratio calculator from jets");
1061 "membership function factor calculator from jets");
1065 "jet distance calculator");
1079 std::vector<int> matchTable;
1085 assert(nmatched ==
recoJets.size());
1090 for (
unsigned i=0;
i<nmatched; ++
i)
1097 const int mask,
const bool value)
1099 int status = jet->status();
1104 jet->setStatus(status);
1110 std::auto_ptr<fftjet::Grid2d<fftjetcms::Real> >& density)
1119 fftjet::Grid2d<Real>&
g(*density);
1120 const unsigned nEta = g.nEta();
1121 const unsigned nPhi = g.nPhi();
1123 for (
unsigned ieta=0; ieta<nEta; ++ieta)
1125 const double eta(g.etaBinCenter(ieta));
1129 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1131 const double phi(g.phiBinCenter(iphi));
1132 g.uncheckedSetBin(ieta, iphi, calc(
eta,
phi, s));
1137 const double pil = calc(
eta, 0.0, s);
1138 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1139 g.uncheckedSetBin(ieta, iphi, pil);
1148 std::auto_ptr<fftjet::Grid2d<fftjetcms::Real> >& density)
1153 boost::shared_ptr<npstat::StorableMultivariateFunctor>
f =
1159 const float rho = summary->pileupRho();
1160 const bool phiDependent = f->minDim() == 3U;
1162 fftjet::Grid2d<Real>&
g(*density);
1163 const unsigned nEta = g.nEta();
1164 const unsigned nPhi = g.nPhi();
1166 double functorArg[3] = {0.0, 0.0, 0.0};
1168 functorArg[2] =
rho;
1170 functorArg[1] =
rho;
1172 for (
unsigned ieta=0; ieta<nEta; ++ieta)
1174 const double eta(g.etaBinCenter(ieta));
1175 functorArg[0] =
eta;
1179 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1181 functorArg[1] = g.phiBinCenter(iphi);
1182 g.uncheckedSetBin(ieta, iphi, (*f)(functorArg, 3U));
1187 const double pil = (*f)(functorArg, 2U);
1188 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1189 g.uncheckedSetBin(ieta, iphi, pil);
1199 assert(!
"Pile-up subtraction for fuzzy clustering "
1200 "is not implemented yet");
1203 const unsigned nJets =
recoJets.size();
1208 for (
unsigned i=0;
i<nJets; ++
i)
1213 const unsigned nEta = g.nEta();
1214 const unsigned nPhi = g.nPhi();
1215 const double cellArea = g.etaBinWidth() * g.phiBinWidth();
1226 doubleBuf.resize(nJets*4U + nJets*nPhi);
1228 double* recoScaleRatios = recoScales + nJets;
1229 double* memFactors = recoScaleRatios + nJets;
1230 double* dEta = memFactors + nJets;
1231 double* dPhiBuf = dEta + nJets;
1237 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1240 const fftjet::Peak& peak(jet.precluster());
1244 fftjet::AbsMembershipFunction* m3d =
1245 dynamic_cast<fftjet::AbsMembershipFunction*
>(
1246 peak.membershipFunction());
1248 m3d =
dynamic_cast<fftjet::AbsMembershipFunction*
>(
1252 assert(!
"Pile-up subtraction for 3-d membership functions "
1253 "is not implemented yet");
1257 fftjet::AbsKernel2d* m2d =
1258 dynamic_cast<fftjet::AbsKernel2d*
>(
1259 peak.membershipFunction());
1261 m2d =
dynamic_cast<fftjet::AbsKernel2d*
>(
1264 memFcns2d[ijet] = m2d;
1266 recoScales[ijet] = scaleCalc(jet);
1267 recoScaleRatios[ijet] = ratioCalc(jet);
1268 memFactors[ijet] = factorCalc(jet);
1269 cellCounts[ijet] = 0U;
1271 const double jetPhi = jet.vec().Phi();
1272 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1274 double dphi = g.phiBinCenter(iphi) -
jetPhi;
1277 while (dphi < -
M_PI)
1279 dPhiBuf[iphi*nJets+ijet] = dphi;
1286 for (
unsigned ieta=0; ieta<nEta; ++ieta)
1288 const double eta(g.etaBinCenter(ieta));
1289 const Real* databuf = g.data() + ieta*nPhi;
1292 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1295 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1298 unsigned maxWJet(nJets);
1299 const double*
dPhi = dPhiBuf + iphi*nJets;
1301 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1303 if (recoScaleRatios[ijet] > 0.0)
1304 memFcns2d[ijet]->setScaleRatio(recoScaleRatios[ijet]);
1305 const double f = memFactors[ijet]*
1306 (*memFcns2d[ijet])(dEta[ijet], dPhi[ijet],
1315 if (maxWJet < nJets)
1317 pileup[maxWJet] += vMaker(cellArea*databuf[iphi],
1318 eta, g.phiBinCenter(iphi));
1319 cellCounts[maxWJet]++;
std::vector< std::vector< reco::CandidatePtr > > constituents
virtual ~FFTJetProducer()
unsigned matchOneToOne(const std::vector< T1 > &v1, const std::vector< T2 > &v2, const DistanceCalculator &calc, std::vector< int > *matchFrom1To2, const double maxMatchingDistance=1.0e300)
T getParameter(std::string const &) const
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow
T getUntrackedParameter(std::string const &, T const &) const
std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
std::auto_ptr< RecoAlg > recoAlg
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
unsigned iterationsPerformed
std::vector< ProtoJet > OutputCollection
const bool useGriddedAlgorithm
std::vector< fftjetcms::VectorLike > pileup
edm::Handle< reco::CandidateView > inputCollection
static Resolution parse_resolution(const std::string &name)
const bool resumConstituents
void selectTreeNodes(const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelect, std::vector< SparseTree::NodeId > *nodes)
Class for storing FFTJet sparse clustering trees.
const double gridScanMaxEta
void saveResults(edm::Event &iEvent, const edm::EventSetup &, unsigned nPreclustersFound)
std::auto_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
virtual std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleRatioCalcPeak(const edm::ParameterSet &)
std::auto_ptr< GridAlg > gridAlg
std::auto_ptr< fftjetcms::AbsPileupCalculator > pileupDensityCalc
virtual void assignMembershipFunctions(std::vector< fftjet::Peak > *preclusters)
const reco::Particle::Point & vertexUsed() const
#define DEFINE_FWK_MODULE(type)
void loadInputCollection(const edm::Event &)
virtual std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > parse_peakSelector(const edm::ParameterSet &)
virtual std::auto_ptr< fftjetcms::AbsPileupCalculator > parse_pileupDensityCalc(const edm::ParameterSet &ps)
std::vector< InputItem > InputCollection
virtual void determinePileupDensityFromDB(const edm::Event &iEvent, const edm::EventSetup &iSetup, const edm::InputTag &label, std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
const std::string recombinationAlgorithm
Data processing summary generated by FFTJetProducer.
virtual std::auto_ptr< fftjetcms::AbsBgFunctor > parse_bgMembershipFunction(const edm::ParameterSet &)
const bool subtractPileupAs4Vec
fftjet::RecombinedJet< VectorLike > jetFromStorable(const reco::FFTJet< Real > &jet)
std::auto_ptr< fftjet::ScaleSpaceKernel > fftjet_MembershipFunction_parser(const edm::ParameterSet &ps)
void checkConfig(const Ptr &ptr, const char *message)
const double unlikelyBgWeight
void makeProduces(const std::string &alias, const std::string &tag)
const bool subtractPileup
std::auto_ptr< AbsPileupCalculator > fftjet_PileupCalculator_parser(const edm::ParameterSet &ps)
std::vector< double > doubleBuf
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak
std::vector< fftjet::AbsKernel2d * > memFcns2dVec
std::vector< RecoFFTJet > recoJets
const double recombinationDataCutoff
Summary info for pile-up determined by Gaussian filtering.
std::vector< unsigned > occupancy
const double minStableScale
const double maxStableScale
#define init_param(type, varname)
std::vector< fftjet::Peak > preclusters
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
void determineVectorConstituents()
static std::string const input
virtual std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_memberFactorCalcPeak(const edm::ParameterSet &)
void loadSparseTreeData(const edm::Event &)
std::auto_ptr< fftjetcms::AbsBgFunctor > bgMembershipFunction
const bool reuseExistingGrid
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)
double getEventScale() const
const unsigned nClustersRequested
virtual void produce(edm::Event &, const edm::EventSetup &)
std::vector< unsigned > candidateIndex
std::auto_ptr< fftjet::Functor2< double, fftjet::RecombinedJet< VectorLike >, fftjet::RecombinedJet< VectorLike > > > fftjet_JetDistance_parser(const edm::ParameterSet &ps)
double dPhi(double phi1, double phi2)
std::auto_ptr< std::vector< double > > iniScales
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
math::XYZTLorentzVector VectorLike
virtual void determinePileupDensityFromConfig(const edm::Event &iEvent, const edm::InputTag &label, std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
void clear(CLHEP::HepGenMatrix &m)
Helper function: Reset all elements of a matrix to 0.
virtual std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleCalcJet(const edm::ParameterSet &)
Implements inheritance relationships for FFTJet jets.
static void setJetStatusBit(RecoFFTJet *jet, int mask, bool value)
std::vector< RecoFFTJet > iterJets
fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
std::vector< unsigned > cellCountsVec
std::string pileupTableRecord
std::string pileupTableName
std::vector< double > thresholds
virtual std::auto_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > parse_jetDistanceCalc(const edm::ParameterSet &)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
unsigned iterateJetReconstruction()
void setNCells(const double nc)
const bool calculatePileup
const bool assignConstituents
bool storeInSinglePrecision() const
void setPileup(const math::XYZTLorentzVector &p)
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)
bool checkConvergence(const std::vector< RecoFFTJet > &previousIterResult, std::vector< RecoFFTJet > &thisIterResult)
const edm::InputTag treeLabel
virtual void selectPreclusters(const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
void sparsePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::SparseClusteringTree< fftjet::Peak, long > *out)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
const edm::InputTag genJetsLabel
const edm::ParameterSet myConfiguration
fftjet::RecombinedJet< fftjetcms::VectorLike > RecoFFTJet
const double stabilityAlpha
std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
virtual std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_memberFactorCalcJet(const edm::ParameterSet &)
void discretizeEnergyFlow()
const unsigned maxInitialPreclusters
std::string pileupTableCategory
virtual std::auto_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleCalcPeak(const edm::ParameterSet &)
void setFourVec(const math::XYZTLorentzVector &p)
std::vector< SparseTree::NodeId > nodes
void determineGriddedConstituents()
const double convergenceDistance
void writeJets(edm::Event &iEvent, const edm::EventSetup &)
virtual std::auto_ptr< fftjet::ScaleSpaceKernel > parse_jetMembershipFunction(const edm::ParameterSet &)
virtual std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleRatioCalcJet(const edm::ParameterSet &)
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
const edm::InputTag pileupLabel
#define jet_type_switch(method, arg1, arg2)
virtual void genJetPreclusters(const SparseTree &tree, edm::Event &, const edm::EventSetup &, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
static bool loadEnergyFlow(const edm::Event &iEvent, const edm::InputTag &label, std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > &flow)
virtual bool isPhiDependent() const =0
std::auto_ptr< AbsBgFunctor > fftjet_BgFunctor_parser(const edm::ParameterSet &ps)
static const Mapper & instance()
std::vector< fftjetcms::VectorLike > eventData
const std::string outputLabel
math::XYZTLorentzVector adjustForPileup(const math::XYZTLorentzVector &jet, const math::XYZTLorentzVector &pileup, bool subtractPileupAs4Vec)
fftjetcms::VectorLike unclustered
std::auto_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
std::vector< fftjet::Peak > iterPreclusters
std::auto_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
std::auto_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
std::auto_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
std::auto_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)
void writeSpecific(reco::CaloJet &jet, reco::Particle::LorentzVector const &p4, reco::Particle::Point const &point, std::vector< reco::CandidatePtr > const &constituents, edm::EventSetup const &c)
void removeFakePreclusters()
const unsigned maxIterations
std::auto_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
void prepareRecombinationScales()