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();}
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);
160 iterationsPerformed(1
U),
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,
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,
260 const unsigned nNodes =
nodes.size();
261 const SparseTree::NodeId* pnodes = nNodes ? &
nodes[0] :
nullptr;
262 preclusters->reserve(nNodes);
263 for (
unsigned i=0;
i<nNodes; ++
i)
264 preclusters->push_back(
269 fftjet::Peak*
clusters = nNodes ? &(*preclusters)[0] :
nullptr;
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::unique_ptr<GridAlg>(
437 std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> >&
flow)
443 bool rebuildGrid =
flow.get() ==
nullptr;
454 flow = std::unique_ptr<fftjet::Grid2d<Real> >(
455 new fftjet::Grid2d<Real>(
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 = 1
U;
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();
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();
599 const unsigned* candIdx = maskLength ? &
candidateIndex[0] :
nullptr;
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 auto jets = std::make_unique<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 ev.
put(std::make_unique<reco::FFTJetProducerSummary>(
738 minScale, maxScale, scaleUsed,
751 loadSparseTreeData<float>(
iEvent);
753 loadSparseTreeData<double>(
iEvent);
796 unsigned nPreclustersFound = 0
U;
798 for (
unsigned i=0;
i<npre; ++
i)
813 <<
"FFTJet algorithm failed (first iteration)" << std::endl;
823 const unsigned nJets =
recoJets.size();
836 const unsigned nJets =
recoJets.size();
841 for (
unsigned i=0;
i<=nJets; ++
i)
867 std::unique_ptr<fftjet::Functor1<bool,fftjet::Peak> >
876 std::unique_ptr<fftjet::ScaleSpaceKernel>
885 std::unique_ptr<AbsBgFunctor>
894 std::unique_ptr<fftjet::Functor1<double,fftjet::Peak> >
903 std::unique_ptr<fftjetcms::AbsPileupCalculator>
912 std::unique_ptr<fftjet::Functor1<double,fftjet::Peak> >
921 std::unique_ptr<fftjet::Functor1<double,fftjet::Peak> >
929 std::unique_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
937 std::unique_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
945 std::unique_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
953 std::unique_ptr<fftjet::Functor2<
985 fftjet::DefaultVectorRecombinationAlgFactory<
989 <<
"Invalid vector recombination algorithm \"" 991 recoAlg = std::unique_ptr<RecoAlg>(
1023 "reconstruction scale calculator from peaks");
1028 "reconstruction scale ratio calculator from peaks");
1033 "membership function factor calculator from peaks");
1040 "reconstruction scale calculator from jets");
1044 "reconstruction scale ratio calculator from jets");
1048 "membership function factor calculator from jets");
1052 "jet distance calculator");
1066 std::vector<int> matchTable;
1072 assert(nmatched ==
recoJets.size());
1077 for (
unsigned i=0;
i<nmatched; ++
i)
1086 int status = jet->status();
1091 jet->setStatus(status);
1097 std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> >& density)
1106 fftjet::Grid2d<Real>&
g(*density);
1107 const unsigned nEta = g.nEta();
1108 const unsigned nPhi = g.nPhi();
1110 for (
unsigned ieta=0; ieta<
nEta; ++ieta)
1112 const double eta(g.etaBinCenter(ieta));
1116 for (
unsigned iphi=0; iphi<
nPhi; ++iphi)
1118 const double phi(g.phiBinCenter(iphi));
1119 g.uncheckedSetBin(ieta, iphi, calc(
eta,
phi, s));
1124 const double pil = calc(
eta, 0.0, s);
1125 for (
unsigned iphi=0; iphi<
nPhi; ++iphi)
1126 g.uncheckedSetBin(ieta, iphi, pil);
1134 std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> >& density)
1139 boost::shared_ptr<npstat::StorableMultivariateFunctor>
f =
1146 const bool phiDependent = f->minDim() == 3
U;
1148 fftjet::Grid2d<Real>&
g(*density);
1149 const unsigned nEta = g.nEta();
1150 const unsigned nPhi = g.nPhi();
1152 double functorArg[3] = {0.0, 0.0, 0.0};
1154 functorArg[2] =
rho;
1156 functorArg[1] =
rho;
1158 for (
unsigned ieta=0; ieta<
nEta; ++ieta)
1160 const double eta(g.etaBinCenter(ieta));
1161 functorArg[0] =
eta;
1165 for (
unsigned iphi=0; iphi<
nPhi; ++iphi)
1167 functorArg[1] = g.phiBinCenter(iphi);
1168 g.uncheckedSetBin(ieta, iphi, (*f)(functorArg, 3
U));
1173 const double pil = (*f)(functorArg, 2
U);
1174 for (
unsigned iphi=0; iphi<
nPhi; ++iphi)
1175 g.uncheckedSetBin(ieta, iphi, pil);
1185 assert(!
"Pile-up subtraction for fuzzy clustering " 1186 "is not implemented yet");
1189 const unsigned nJets =
recoJets.size();
1194 for (
unsigned i=0;
i<nJets; ++
i)
1199 const unsigned nEta = g.nEta();
1200 const unsigned nPhi = g.nPhi();
1201 const double cellArea = g.etaBinWidth() * g.phiBinWidth();
1214 double* recoScaleRatios = recoScales + nJets;
1215 double* memFactors = recoScaleRatios + nJets;
1216 double*
dEta = memFactors + nJets;
1217 double* dPhiBuf = dEta + nJets;
1223 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1226 const fftjet::Peak& peak(jet.precluster());
1230 fftjet::AbsMembershipFunction* m3d =
1231 dynamic_cast<fftjet::AbsMembershipFunction*
>(
1232 peak.membershipFunction());
1234 m3d =
dynamic_cast<fftjet::AbsMembershipFunction*
>(
1238 assert(!
"Pile-up subtraction for 3-d membership functions " 1239 "is not implemented yet");
1243 fftjet::AbsKernel2d* m2d =
1244 dynamic_cast<fftjet::AbsKernel2d*
>(
1245 peak.membershipFunction());
1247 m2d =
dynamic_cast<fftjet::AbsKernel2d*
>(
1250 memFcns2d[ijet] = m2d;
1252 recoScales[ijet] = scaleCalc(jet);
1253 recoScaleRatios[ijet] = ratioCalc(jet);
1254 memFactors[ijet] = factorCalc(jet);
1255 cellCounts[ijet] = 0
U;
1257 const double jetPhi = jet.vec().Phi();
1258 for (
unsigned iphi=0; iphi<
nPhi; ++iphi)
1260 double dphi = g.phiBinCenter(iphi) -
jetPhi;
1263 while (dphi < -
M_PI)
1265 dPhiBuf[iphi*nJets+ijet] = dphi;
1272 for (
unsigned ieta=0; ieta<
nEta; ++ieta)
1274 const double eta(g.etaBinCenter(ieta));
1275 const Real* databuf = g.data() + ieta*
nPhi;
1278 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1281 for (
unsigned iphi=0; iphi<
nPhi; ++iphi)
1284 unsigned maxWJet(nJets);
1285 const double*
dPhi = dPhiBuf + iphi*nJets;
1287 for (
unsigned ijet=0; ijet<nJets; ++ijet)
1289 if (recoScaleRatios[ijet] > 0.0)
1290 memFcns2d[ijet]->setScaleRatio(recoScaleRatios[ijet]);
1291 const double f = memFactors[ijet]*
1292 (*memFcns2d[ijet])(dEta[ijet], dPhi[ijet],
1301 if (maxWJet < nJets)
1303 pileup[maxWJet] += vMaker(cellArea*databuf[iphi],
1304 eta, g.phiBinCenter(iphi));
1305 cellCounts[maxWJet]++;
std::vector< std::vector< reco::CandidatePtr > > constituents
void produce(edm::Event &, const edm::EventSetup &) override
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
T getUntrackedParameter(std::string const &, T const &) const
virtual std::unique_ptr< fftjet::ScaleSpaceKernel > parse_jetMembershipFunction(const edm::ParameterSet &)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
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
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
void saveResults(edm::Event &iEvent, const edm::EventSetup &, unsigned nPreclustersFound)
virtual void assignMembershipFunctions(std::vector< fftjet::Peak > *preclusters)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Ptr< value_type > ptrAt(size_type i) const
const reco::Particle::Point & vertexUsed() const
#define DEFINE_FWK_MODULE(type)
void loadInputCollection(const edm::Event &)
const std::string recombinationAlgorithm
const bool subtractPileupAs4Vec
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)
virtual std::unique_ptr< fftjetcms::AbsBgFunctor > parse_bgMembershipFunction(const edm::ParameterSet &)
fftjet::RecombinedJet< VectorLike > jetFromStorable(const reco::FFTJet< Real > &jet)
void checkConfig(const Ptr &ptr, const char *message)
unsigned nEtaBins() const
const double unlikelyBgWeight
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
void makeProduces(const std::string &alias, const std::string &tag)
std::unique_ptr< AbsBgFunctor > fftjet_BgFunctor_parser(const edm::ParameterSet &ps)
const bool subtractPileup
std::unique_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
edm::EDGetTokenT< reco::PattRecoTree< fftjetcms::Real, reco::PattRecoPeak< fftjetcms::Real > > > input_recotree_token_
std::vector< double > doubleBuf
std::vector< fftjet::AbsKernel2d * > memFcns2dVec
std::vector< RecoFFTJet > recoJets
std::unique_ptr< GridAlg > gridAlg
const double recombinationDataCutoff
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak
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
std::unique_ptr< fftjet::Functor2< double, fftjet::RecombinedJet< VectorLike >, fftjet::RecombinedJet< VectorLike > > > fftjet_JetDistance_parser(const edm::ParameterSet &ps)
const double * data() const
void loadSparseTreeData(const edm::Event &)
const bool reuseExistingGrid
double getEventScale() const
const unsigned nClustersRequested
virtual std::unique_ptr< fftjetcms::AbsPileupCalculator > parse_pileupDensityCalc(const edm::ParameterSet &ps)
std::unique_ptr< std::vector< double > > iniScales
std::vector< unsigned > candidateIndex
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
std::unique_ptr< fftjetcms::AbsBgFunctor > bgMembershipFunction
std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleCalcJet(const edm::ParameterSet &)
math::XYZTLorentzVector VectorLike
std::unique_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)
void clear(CLHEP::HepGenMatrix &m)
Helper function: Reset all elements of a matrix to 0.
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleRatioCalcPeak(const edm::ParameterSet &)
Implements inheritance relationships for FFTJet jets.
unsigned nPhiBins() const
static void setJetStatusBit(RecoFFTJet *jet, int mask, bool value)
std::vector< RecoFFTJet > iterJets
const char * title() const
virtual void determinePileupDensityFromDB(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
std::vector< unsigned > cellCountsVec
std::unique_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
std::string pileupTableRecord
std::string pileupTableName
std::vector< double > thresholds
unsigned iterateJetReconstruction()
std::unique_ptr< AbsPileupCalculator > fftjet_PileupCalculator_parser(const edm::ParameterSet &ps)
void setNCells(const double nc)
const bool calculatePileup
const bool assignConstituents
bool storeInSinglePrecision() const
void setPileup(const math::XYZTLorentzVector &p)
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)
const edm::InputTag genJetsLabel
const edm::ParameterSet myConfiguration
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > input_energyflow_token_
fftjet::RecombinedJet< fftjetcms::VectorLike > RecoFFTJet
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleRatioCalcJet(const edm::ParameterSet &)
edm::EDGetTokenT< reco::FFTJetPileupSummary > input_pusummary_token_
virtual bool isPhiDependent() const =0
const double stabilityAlpha
void discretizeEnergyFlow()
const unsigned maxInitialPreclusters
std::string pileupTableCategory
std::unique_ptr< fftjetcms::AbsPileupCalculator > pileupDensityCalc
void setFourVec(const math::XYZTLorentzVector &p)
std::vector< SparseTree::NodeId > nodes
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)
void determineGriddedConstituents()
const double convergenceDistance
edm::EDGetTokenT< std::vector< reco::FFTAnyJet< reco::GenJet > > > input_genjet_token_
void writeJets(edm::Event &iEvent, const edm::EventSetup &)
~FFTJetProducer() override
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
const edm::InputTag pileupLabel
virtual std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > parse_peakSelector(const edm::ParameterSet &)
#define jet_type_switch(method, arg1, arg2)
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow
virtual void genJetPreclusters(const SparseTree &tree, edm::Event &, const edm::EventSetup &, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
bool loadEnergyFlow(const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &flow)
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
static const Mapper & instance()
std::unique_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
std::unique_ptr< RecoAlg > recoAlg
std::vector< fftjetcms::VectorLike > eventData
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_memberFactorCalcPeak(const edm::ParameterSet &)
const std::string outputLabel
math::XYZTLorentzVector adjustForPileup(const math::XYZTLorentzVector &jet, const math::XYZTLorentzVector &pileup, bool subtractPileupAs4Vec)
fftjetcms::VectorLike unclustered
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleCalcPeak(const edm::ParameterSet &)
std::vector< fftjet::Peak > iterPreclusters
virtual void determinePileupDensityFromConfig(const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
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()
std::unique_ptr< fftjet::ScaleSpaceKernel > fftjet_MembershipFunction_parser(const edm::ParameterSet &ps)
const unsigned maxIterations
void prepareRecombinationScales()
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_memberFactorCalcJet(const edm::ParameterSet &)
virtual std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > parse_jetDistanceCalc(const edm::ParameterSet &)
double phiBin0Edge() const