24 #include "fftjet/peakEtLifetime.hh"
45 #define make_param(type, varname) const \
46 type & varname (ps.getParameter< type >( #varname ))
48 #define init_param(type, varname) varname (ps.getParameter< type >( #varname ))
57 #define jet_type_switch(method, arg1, arg2) do {\
61 method <reco::CaloJet> ( arg1 , arg2 );\
64 method <reco::PFJet> ( arg1 , arg2 );\
67 method <reco::GenJet> ( arg1 , arg2 );\
70 method <reco::TrackJet> ( arg1 , arg2 );\
73 method <reco::BasicJet> ( arg1 , arg2 );\
76 assert(!"ERROR in FFTJetProducer : invalid jet type."\
77 " This is a bug. Please report.");\
85 inline bool operator()(
const Jet&
l,
const Jet&
r)
const
86 {
return l.pt() > r.pt();}
90 using namespace fftjetcms;
95 if (!name.compare(
"fixed"))
97 else if (!name.compare(
"maximallyStable"))
98 return MAXIMALLY_STABLE;
99 else if (!name.compare(
"globallyAdaptive"))
100 return GLOBALLY_ADAPTIVE;
101 else if (!name.compare(
"locallyAdaptive"))
102 return LOCALLY_ADAPTIVE;
103 else if (!name.compare(
"fromGenJets"))
107 <<
"Invalid resolution specification \""
108 << name <<
"\"" << std::endl;
112 template <
typename T>
116 produces<std::vector<reco::FFTAnyJet<T> > >(
tag).setBranchAlias(alias);
129 init_param(unsigned, nJetsRequiredToConverge),
160 iterationsPerformed(1U),
166 <<
"Can't resum constituents if they are not assigned"
169 produces<reco::FFTJetProducerSummary>(
outputLabel);
211 if (!input->isSparse())
213 <<
"The stored clustering tree is not sparse" << std::endl;
226 const fftjet::Functor1<bool,fftjet::Peak>& peakSelect,
227 std::vector<fftjet::Peak>* preclusters)
230 typedef std::vector<InputJet> InputCollection;
235 const unsigned sz = input->size();
236 preclusters->reserve(sz);
237 for (
unsigned i=0;
i<sz; ++
i)
240 fftjet::Peak
p(jet.precluster());
241 const double scale(
p.scale());
242 p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
246 preclusters->push_back(
p);
253 const fftjet::Functor1<bool,fftjet::Peak>& peakSelect,
254 std::vector<fftjet::Peak>* preclusters)
260 const unsigned nNodes =
nodes.size();
261 const SparseTree::NodeId* pnodes = nNodes ? &
nodes[0] : 0;
262 preclusters->reserve(nNodes);
263 for (
unsigned i=0;
i<nNodes; ++
i)
264 preclusters->push_back(
269 fftjet::Peak* clusters = nNodes ? &(*preclusters)[0] : 0;
270 for (
unsigned i=0; i<nNodes; ++
i)
272 clusters[
i].setCode(pnodes[i]);
280 const fftjet::Functor1<bool,fftjet::Peak>& peakSelect,
281 std::vector<SparseTree::NodeId>* mynodes)
292 tree.getPassingNodes(
usedLevel, peakSelect, mynodes);
303 if (tree.stableClusterCount(
305 minStartingLevel, maxStartingLevel))
308 tree.getPassingNodes(
usedLevel, peakSelect, mynodes);
315 const bool stable = tree.clusterCountLevels(
322 const int maxlev = tree.maxStoredLevel();
323 bool levelFound =
false;
325 for (
int ifac=1; ifac>-2 && !levelFound; ifac-=2)
328 if (level > 0 && level <= maxlev)
346 const unsigned maxlev = tree.maxStoredLevel();
358 const unsigned d = nClustersRequested > n ?
369 tree.getPassingNodes(
usedLevel, peakSelect, mynodes);
382 assert(!
"ERROR in FFTJetProducer::selectTreeNodes : "
383 "should never get here! This is a bug. Please report.");
394 fftjet::Functor1<double,fftjet::Peak>&
396 fftjet::Functor1<double,fftjet::Peak>&
398 fftjet::Functor1<double,fftjet::Peak>&
401 for (
unsigned i=0;
i<nClus; ++
i)
403 clus[
i].setRecoScale(scaleCalc(clus[
i]));
404 clus[
i].setRecoScaleRatio(ratioCalc(clus[i]));
405 clus[
i].setMembershipFactor(factorCalc(clus[i]));
420 fftjet::DefaultRecombinationAlgFactory<
424 <<
"Invalid grid recombination algorithm \""
426 gridAlg = std::auto_ptr<GridAlg>(
437 std::auto_ptr<fftjet::Grid2d<fftjetcms::Real> >& flow)
443 bool rebuildGrid = flow.get() ==
NULL;
446 !(flow->nEta() == input->nEtaBins() &&
447 flow->nPhi() == input->nPhiBins() &&
448 flow->etaMin() == input->etaMin() &&
449 flow->etaMax() == input->etaMax() &&
450 flow->phiBin0Edge() == input->phiBin0Edge());
454 flow = std::auto_ptr<fftjet::Grid2d<Real> >(
455 new fftjet::Grid2d<Real>(
456 input->nEtaBins(), input->etaMin(), input->etaMax(),
457 input->nPhiBins(), input->phiBin0Edge(), input->title()));
459 flow->blockSet(input->data(), input->nEtaBins(), input->nPhiBins());
465 std::vector<RecoFFTJet>& nextSet)
467 fftjet::Functor2<double,RecoFFTJet,RecoFFTJet>&
470 const unsigned nJets = previous.size();
471 if (nJets != nextSet.size())
478 bool converged =
true;
479 for (
unsigned i=0;
i<nJets; ++
i)
481 const double d = distanceCalc(prev[
i], next[i]);
482 next[
i].setConvergenceDistance(d);
498 unsigned iterNum = 1U;
499 bool converged =
false;
506 for (
unsigned i=0;
i<nJets; ++
i)
509 fftjet::Peak
p(jet.precluster());
510 p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
511 p.setRecoScale(scaleCalc(jet));
512 p.setRecoScaleRatio(ratioCalc(jet));
513 p.setMembershipFactor(factorCalc(jet));
528 <<
"FFTJet algorithm failed" << std::endl;
551 for (
unsigned i=0;
i<nJets; ++
i)
554 jets[
i].setPeakEtaPhi(oldp.eta(), oldp.phi());
570 const unsigned nJets =
recoJets.size();
571 const unsigned* clusterMask =
gridAlg->getClusterMask();
572 const int nEta =
gridAlg->getLastNEta();
573 const int nPhi =
gridAlg->getLastNPhi();
576 const unsigned nInputs =
eventData.size();
579 for (
unsigned i=0;
i<nInputs; ++
i)
582 const int iPhi = g.getPhiBin(item.Phi());
583 const int iEta = g.getEtaBin(item.Eta());
584 const unsigned mask = iEta >= 0 && iEta < nEta ?
585 clusterMask[iEta*nPhi + iPhi] : 0;
586 assert(mask <= nJets);
594 const unsigned nJets =
recoJets.size();
595 const unsigned* clusterMask =
recoAlg->getClusterMask();
596 const unsigned maskLength =
recoAlg->getLastNData();
600 for (
unsigned i=0;
i<maskLength; ++
i)
606 const unsigned mask = clusterMask[
i];
607 assert(mask <= nJets);
615 template <
typename T>
619 using namespace reco;
622 typedef std::vector<OutputJet> OutputCollection;
636 std::auto_ptr<OutputCollection>
jets(
new OutputCollection());
637 const unsigned nJets =
recoJets.size();
638 jets->reserve(nJets);
641 double previousPt = DBL_MAX;
642 for (
unsigned ijet=0; ijet<nJets; ++ijet)
653 for (
unsigned i=0;
i<nCon; ++
i)
678 double ncells = myjet.ncells();
684 jet.setJetArea(cellArea*ncells);
694 jets->push_back(OutputJet(jet, fj));
697 const double pt = jet.pt();
705 std::sort(jets->begin(), jets->end(), LocalSortByPt());
713 const unsigned nPreclustersFound)
725 for (
unsigned i=0;
i<nCon; ++
i)
735 std::auto_ptr<reco::FFTJetProducerSummary>
summary(
739 minScale, maxScale, scaleUsed,
753 loadSparseTreeData<float>(
iEvent);
755 loadSparseTreeData<double>(
iEvent);
798 unsigned nPreclustersFound = 0U;
800 for (
unsigned i=0;
i<npre; ++
i)
815 <<
"FFTJet algorithm failed (first iteration)" << std::endl;
825 const unsigned nJets =
recoJets.size();
838 const unsigned nJets =
recoJets.size();
843 for (
unsigned i=0;
i<=nJets; ++
i)
869 std::auto_ptr<fftjet::Functor1<bool,fftjet::Peak> >
878 std::auto_ptr<fftjet::ScaleSpaceKernel>
887 std::auto_ptr<AbsBgFunctor>
896 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
905 std::auto_ptr<fftjetcms::AbsPileupCalculator>
914 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
923 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
931 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
939 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
947 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
955 std::auto_ptr<fftjet::Functor2<
987 fftjet::DefaultVectorRecombinationAlgFactory<
991 <<
"Invalid vector recombination algorithm \""
993 recoAlg = std::auto_ptr<RecoAlg>(
1025 "reconstruction scale calculator from peaks");
1030 "reconstruction scale ratio calculator from peaks");
1035 "membership function factor calculator from peaks");
1042 "reconstruction scale calculator from jets");
1046 "reconstruction scale ratio calculator from jets");
1050 "membership function factor calculator from jets");
1054 "jet distance calculator");
1068 std::vector<int> matchTable;
1074 assert(nmatched ==
recoJets.size());
1079 for (
unsigned i=0;
i<nmatched; ++
i)
1086 const int mask,
const bool value)
1088 int status = jet->status();
1093 jet->setStatus(status);
1099 std::auto_ptr<fftjet::Grid2d<fftjetcms::Real> >& density)
1108 fftjet::Grid2d<Real>&
g(*density);
1109 const unsigned nEta = g.nEta();
1110 const unsigned nPhi = g.nPhi();
1112 for (
unsigned ieta=0; ieta<nEta; ++ieta)
1114 const double eta(g.etaBinCenter(ieta));
1118 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1120 const double phi(g.phiBinCenter(iphi));
1121 g.uncheckedSetBin(ieta, iphi, calc(
eta,
phi, s));
1126 const double pil = calc(
eta, 0.0, s);
1127 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1128 g.uncheckedSetBin(ieta, iphi, pil);
1136 std::auto_ptr<fftjet::Grid2d<fftjetcms::Real> >& density)
1141 boost::shared_ptr<npstat::StorableMultivariateFunctor>
f =
1147 const float rho = summary->pileupRho();
1148 const bool phiDependent = f->minDim() == 3U;
1150 fftjet::Grid2d<Real>&
g(*density);
1151 const unsigned nEta = g.nEta();
1152 const unsigned nPhi = g.nPhi();
1154 double functorArg[3] = {0.0, 0.0, 0.0};
1156 functorArg[2] =
rho;
1158 functorArg[1] =
rho;
1160 for (
unsigned ieta=0; ieta<nEta; ++ieta)
1162 const double eta(g.etaBinCenter(ieta));
1163 functorArg[0] =
eta;
1167 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1169 functorArg[1] = g.phiBinCenter(iphi);
1170 g.uncheckedSetBin(ieta, iphi, (*f)(functorArg, 3U));
1175 const double pil = (*f)(functorArg, 2U);
1176 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1177 g.uncheckedSetBin(ieta, iphi, pil);
1187 assert(!
"Pile-up subtraction for fuzzy clustering "
1188 "is not implemented yet");
1191 const unsigned nJets =
recoJets.size();
1196 for (
unsigned i=0;
i<nJets; ++
i)
1201 const unsigned nEta = g.nEta();
1202 const unsigned nPhi = g.nPhi();
1203 const double cellArea = g.etaBinWidth() * g.phiBinWidth();
1214 doubleBuf.resize(nJets*4U + nJets*nPhi);
1216 double* recoScaleRatios = recoScales + nJets;
1217 double* memFactors = recoScaleRatios + nJets;
1218 double* dEta = memFactors + nJets;
1219 double* dPhiBuf = dEta + nJets;
1225 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1228 const fftjet::Peak& peak(jet.precluster());
1232 fftjet::AbsMembershipFunction* m3d =
1233 dynamic_cast<fftjet::AbsMembershipFunction*
>(
1234 peak.membershipFunction());
1236 m3d =
dynamic_cast<fftjet::AbsMembershipFunction*
>(
1240 assert(!
"Pile-up subtraction for 3-d membership functions "
1241 "is not implemented yet");
1245 fftjet::AbsKernel2d* m2d =
1246 dynamic_cast<fftjet::AbsKernel2d*
>(
1247 peak.membershipFunction());
1249 m2d =
dynamic_cast<fftjet::AbsKernel2d*
>(
1252 memFcns2d[ijet] = m2d;
1254 recoScales[ijet] = scaleCalc(jet);
1255 recoScaleRatios[ijet] = ratioCalc(jet);
1256 memFactors[ijet] = factorCalc(jet);
1257 cellCounts[ijet] = 0U;
1259 const double jetPhi = jet.vec().Phi();
1260 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1262 double dphi = g.phiBinCenter(iphi) -
jetPhi;
1265 while (dphi < -
M_PI)
1267 dPhiBuf[iphi*nJets+ijet] = dphi;
1274 for (
unsigned ieta=0; ieta<nEta; ++ieta)
1276 const double eta(g.etaBinCenter(ieta));
1277 const Real* databuf = g.data() + ieta*nPhi;
1280 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1283 for (
unsigned iphi=0; iphi<nPhi; ++iphi)
1286 unsigned maxWJet(nJets);
1287 const double*
dPhi = dPhiBuf + iphi*nJets;
1289 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1291 if (recoScaleRatios[ijet] > 0.0)
1292 memFcns2d[ijet]->setScaleRatio(recoScaleRatios[ijet]);
1293 const double f = memFactors[ijet]*
1294 (*memFcns2d[ijet])(dEta[ijet], dPhi[ijet],
1303 if (maxWJet < nJets)
1305 pileup[maxWJet] += vMaker(cellArea*databuf[iphi],
1306 eta, g.phiBinCenter(iphi));
1307 cellCounts[maxWJet]++;
std::vector< std::vector< reco::CandidatePtr > > constituents
virtual void produce(edm::Event &, const edm::EventSetup &) override
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
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)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
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)
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)
edm::EDGetTokenT< reco::PattRecoTree< fftjetcms::Real, reco::PattRecoPeak< fftjetcms::Real > > > input_recotree_token_
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
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
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 &)
virtual void endJob() override
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
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
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 &)
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)
virtual void determinePileupDensityFromDB(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
void sparsePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::SparseClusteringTree< fftjet::Peak, long > *out)
const edm::InputTag genJetsLabel
const edm::ParameterSet myConfiguration
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > input_energyflow_token_
fftjet::RecombinedJet< fftjetcms::VectorLike > RecoFFTJet
edm::EDGetTokenT< reco::FFTJetPileupSummary > input_pusummary_token_
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
edm::EDGetTokenT< std::vector< reco::FFTAnyJet< reco::GenJet > > > input_genjet_token_
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
virtual void beginJob() override
#define jet_type_switch(method, arg1, arg2)
bool loadEnergyFlow(const edm::Event &iEvent, std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > &flow)
virtual void genJetPreclusters(const SparseTree &tree, edm::Event &, const edm::EventSetup &, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
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)
virtual void determinePileupDensityFromConfig(const edm::Event &iEvent, std::auto_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
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()