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] : 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;
454 flow = std::auto_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();
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::auto_ptr<fftjet::Functor1<bool,fftjet::Peak> >
876 std::auto_ptr<fftjet::ScaleSpaceKernel>
885 std::auto_ptr<AbsBgFunctor>
894 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
903 std::auto_ptr<fftjetcms::AbsPileupCalculator>
912 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
921 std::auto_ptr<fftjet::Functor1<double,fftjet::Peak> >
929 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
937 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
945 std::auto_ptr<fftjet::Functor1<double,FFTJetProducer::RecoFFTJet> >
953 std::auto_ptr<fftjet::Functor2<
985 fftjet::DefaultVectorRecombinationAlgFactory<
989 <<
"Invalid vector recombination algorithm \"" 991 recoAlg = std::auto_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::auto_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::auto_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
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
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)
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
Ptr< value_type > ptrAt(size_type i) 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
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)
unsigned nEtaBins() const
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 &)
const double * data() const
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)
std::auto_ptr< std::vector< double > > iniScales
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.
unsigned nPhiBins() const
static void setJetStatusBit(RecoFFTJet *jet, int mask, bool value)
std::vector< RecoFFTJet > iterJets
const char * title() const
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 &)
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_
virtual bool isPhiDependent() const =0
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)
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()
double phiBin0Edge() const