18 #include "fftjet/PeakSelectors.hh" 19 #include "fftjet/Kernel2dFactory.hh" 20 #include "fftjet/GaussianNoiseMembershipFcn.hh" 21 #include "fftjet/EquidistantSequence.hh" 22 #include "fftjet/PeakEtaPhiDistance.hh" 23 #include "fftjet/PeakEtaDependentDistance.hh" 24 #include "fftjet/JetProperty.hh" 25 #include "fftjet/InterpolatedMembershipFcn.hh" 26 #include "fftjet/CompositeKernel.hh" 27 #include "fftjet/InterpolatedKernel.hh" 28 #include "fftjet/InterpolatedKernel3d.hh" 29 #include "fftjet/MagneticSmearingKernel.hh" 31 #define make_param(type, varname) const \ 32 type & varname (ps.getParameter< type >( #varname )) 39 fftjet::JetProperty<fftjet::Peak>::JetMemberFunction *
f)
41 if (strcmp(fname,
"eta") == 0)
43 else if (strcmp(fname,
"phi") == 0)
45 else if (strcmp(fname,
"magnitude") == 0)
46 *f = &fftjet::Peak::magnitude;
47 else if (strcmp(fname,
"driftSpeed") == 0)
48 *f = &fftjet::Peak::driftSpeed;
49 else if (strcmp(fname,
"magSpeed") == 0)
50 *f = &fftjet::Peak::magSpeed;
51 else if (strcmp(fname,
"lifetime") == 0)
52 *f = &fftjet::Peak::lifetime;
53 else if (strcmp(fname,
"mergeTime") == 0)
54 *f = &fftjet::Peak::mergeTime;
55 else if (strcmp(fname,
"splitTime") == 0)
56 *f = &fftjet::Peak::splitTime;
57 else if (strcmp(fname,
"scale") == 0)
59 else if (strcmp(fname,
"nearestNeighborDistance") == 0)
60 *f = &fftjet::Peak::nearestNeighborDistance;
61 else if (strcmp(fname,
"membershipFactor") == 0)
62 *f = &fftjet::Peak::membershipFactor;
63 else if (strcmp(fname,
"recoScale") == 0)
64 *f = &fftjet::Peak::recoScale;
65 else if (strcmp(fname,
"recoScaleRatio") == 0)
66 *f = &fftjet::Peak::recoScaleRatio;
67 else if (strcmp(fname,
"laplacian") == 0)
68 *f = &fftjet::Peak::laplacian;
69 else if (strcmp(fname,
"hessianDeterminant") == 0)
70 *f = &fftjet::Peak::hessianDeterminant;
71 else if (strcmp(fname,
"clusterRadius") == 0)
72 *f = &fftjet::Peak::clusterRadius;
73 else if (strcmp(fname,
"clusterSeparation") == 0)
74 *f = &fftjet::Peak::clusterSeparation;
83 fftjet::JetProperty<RecoFFTJet>::JetMemberFunction *
f)
85 if (strcmp(fname,
"peakEta") == 0)
86 *f = &RecoFFTJet::peakEta;
87 else if (strcmp(fname,
"peakPhi") == 0)
88 *f = &RecoFFTJet::peakPhi;
89 else if (strcmp(fname,
"peakMagnitude") == 0)
90 *f = &RecoFFTJet::peakMagnitude;
91 else if (strcmp(fname,
"magnitude") == 0)
92 *f = &RecoFFTJet::magnitude;
93 else if (strcmp(fname,
"driftSpeed") == 0)
94 *f = &RecoFFTJet::driftSpeed;
95 else if (strcmp(fname,
"magSpeed") == 0)
96 *f = &RecoFFTJet::magSpeed;
97 else if (strcmp(fname,
"lifetime") == 0)
98 *f = &RecoFFTJet::lifetime;
99 else if (strcmp(fname,
"mergeTime") == 0)
100 *f = &RecoFFTJet::mergeTime;
101 else if (strcmp(fname,
"splitTime") == 0)
102 *f = &RecoFFTJet::splitTime;
103 else if (strcmp(fname,
"scale") == 0)
105 else if (strcmp(fname,
"nearestNeighborDistance") == 0)
106 *f = &RecoFFTJet::nearestNeighborDistance;
107 else if (strcmp(fname,
"membershipFactor") == 0)
108 *f = &RecoFFTJet::membershipFactor;
109 else if (strcmp(fname,
"recoScale") == 0)
110 *f = &RecoFFTJet::recoScale;
111 else if (strcmp(fname,
"recoScaleRatio") == 0)
112 *f = &RecoFFTJet::recoScaleRatio;
113 else if (strcmp(fname,
"laplacian") == 0)
114 *f = &RecoFFTJet::laplacian;
115 else if (strcmp(fname,
"hessianDeterminant") == 0)
116 *f = &RecoFFTJet::hessianDeterminant;
117 else if (strcmp(fname,
"clusterRadius") == 0)
118 *f = &RecoFFTJet::clusterRadius;
119 else if (strcmp(fname,
"clusterSeparation") == 0)
120 *f = &RecoFFTJet::clusterSeparation;
131 std::unique_ptr<fftjet::Grid2d<Real> >
134 typedef std::unique_ptr<fftjet::Grid2d<Real> > return_type;
135 fftjet::Grid2d<Real> *
g =
nullptr;
141 std::ifstream
in(file.c_str(),
145 <<
"Failed to open file " << file << std::endl;
146 g = fftjet::Grid2d<Real>::read(
in);
149 <<
"Failed to read file " << file << std::endl;
161 if (nEtaBins == 0 || nPhiBins == 0 || etaMin >= etaMax)
162 return return_type(
nullptr);
164 g =
new fftjet::Grid2d<Real>(
176 const std::vector<Real>&
data =
178 if (data.size() == nEtaBins*
nPhiBins)
179 g->blockSet(&data[0], nEtaBins, nPhiBins);
188 return return_type(g);
192 std::unique_ptr<fftjet::Functor1<bool,fftjet::Peak> >
195 typedef std::unique_ptr<fftjet::Functor1<bool,fftjet::Peak> > return_type;
200 if (!peakselector_type.compare(
"AllPeaksPass"))
202 return return_type(
new fftjet::AllPeaksPass());
205 if (!peakselector_type.compare(
"EtaAndPtDependentPeakSelector"))
208 std::ifstream
in(file.c_str(),
212 <<
"Failed to open file " << file << std::endl;
217 <<
"Failed to read file " << file << std::endl;
218 return return_type(ptr);
221 if (!peakselector_type.compare(
"EtaAndPtLookupPeakSelector"))
233 <<
"Failed to configure EtaAndPtLookupPeakSelector" << std::endl;
239 if (!peakselector_type.compare(
"SimplePeakSelector"))
250 return return_type(
new fftjet::SimplePeakSelector(
251 magCut, driftSpeedCut, magSpeedCut, lifeTimeCut, NNDCut,
252 etaCut, splitTimeCut, mergeTimeCut));
255 if (!peakselector_type.compare(
"ScalePowerPeakSelector"))
262 return return_type(
new fftjet::ScalePowerPeakSelector(
266 return return_type(
nullptr);
270 std::unique_ptr<fftjet::ScaleSpaceKernel>
273 typedef std::unique_ptr<fftjet::ScaleSpaceKernel> return_type;
279 if (!MembershipFunction_type.compare(
"InterpolatedMembershipFcn"))
287 std::ifstream
in(file.c_str(),
291 <<
"Failed to open file " << file << std::endl;
292 return return_type(fftjet::InterpolatedMembershipFcn<float>::read(
in));
295 if (!MembershipFunction_type.compare(
"Composite"))
298 <<
"Parsing of CompositeKernel objects is not implemented yet" 302 if (!MembershipFunction_type.compare(
"MagneticSmearing"))
308 make_param(std::vector<double>, fragmentationData);
314 if (fragmentationData.empty())
316 <<
"Fragmentation function data not defined for " 317 "MagneticSmearingKernel" << std::endl;
318 if (samplesPerBin < 1
U)
320 <<
"Bad number of samples per bin in " 321 "MagneticSmearingKernel" << std::endl;
323 fftjet::LinearInterpolator1d* fragmentationFunction =
324 new fftjet::LinearInterpolator1d(
325 &fragmentationData[0], fragmentationData.size(), 0.0, 1.0);
328 new fftjet::MagneticSmearingKernel<fftjet::LinearInterpolator1d>(
329 fragmentationFunction, numeratorConst,
330 charge1Fraction, charge2Fraction,
331 samplesPerBin,
true));
334 if (!MembershipFunction_type.compare(
"Interpolated"))
348 if (
data.size() != nxbins*nybins)
350 <<
"Bad number of data points for Interpolated kernel" 353 return return_type(
new fftjet::InterpolatedKernel(
359 if (!MembershipFunction_type.compare(
"Interpolated3d"))
372 if (
data.size() != nxbins*nybins*scales.size())
374 <<
"Bad number of data points for Interpolated3d kernel" 377 return return_type(
new fftjet::InterpolatedKernel3d(
378 &
data[0], scales, useLogSpaceForScale,
384 fftjet::DefaultKernel2dFactory factory;
385 if (factory[MembershipFunction_type] ==
nullptr) {
386 return return_type(
nullptr);
394 const int n_expected = factory[MembershipFunction_type]->nParameters();
398 <<
"Bad number of kernel parameters" << std::endl;
400 return std::unique_ptr<fftjet::ScaleSpaceKernel>(
401 factory[MembershipFunction_type]->create(
406 std::unique_ptr<AbsBgFunctor>
412 if (!bg_Membership_type.compare(
"GaussianNoiseMembershipFcn"))
416 return std::unique_ptr<AbsBgFunctor>(
417 new fftjet::GaussianNoiseMembershipFcn(minWeight,prior));
420 return std::unique_ptr<AbsBgFunctor>(
nullptr);
424 std::unique_ptr<std::vector<double> >
427 typedef std::unique_ptr<std::vector<double> > return_type;
431 if (!className.compare(
"EquidistantInLinearSpace") ||
432 !className.compare(
"EquidistantInLogSpace"))
438 if (minScale <= 0.0 || maxScale <= 0.0 ||
439 nScales == 0 || minScale == maxScale)
440 return return_type(
nullptr);
445 if (!className.compare(
"EquidistantInLinearSpace"))
446 return return_type(
new std::vector<double>(
447 fftjet::EquidistantInLinearSpace(
448 minScale, maxScale, nScales)));
450 return return_type(
new std::vector<double>(
451 fftjet::EquidistantInLogSpace(
452 minScale, maxScale, nScales)));
455 if (!className.compare(
"UserSet"))
457 return_type scales(
new std::vector<double>(
461 const unsigned nscales = scales->size();
462 for (
unsigned i=0;
i<nscales; ++
i)
463 if ((*scales)[
i] <= 0.0)
464 return return_type(
nullptr);
466 for (
unsigned i=1;
i<nscales; ++
i)
467 for (
unsigned j=0; j<
i; ++j)
468 if ((*scales)[i] == (*scales)[j])
469 return return_type(
nullptr);
474 return return_type(
nullptr);
478 std::unique_ptr<fftjet::ClusteringTreeSparsifier<fftjet::Peak,long> >
481 typedef std::unique_ptr<fftjet::ClusteringTreeSparsifier<fftjet::Peak,long> > return_type;
485 const std::vector<double> userScalesV =
487 const unsigned nUserScales = userScalesV.size();
488 const double*
userScales = nUserScales ? &userScalesV[0] :
nullptr;
491 new fftjet::ClusteringTreeSparsifier<fftjet::Peak,long>(
501 std::unique_ptr<fftjet::AbsDistanceCalculator<fftjet::Peak> >
504 typedef std::unique_ptr<fftjet::AbsDistanceCalculator<fftjet::Peak> > return_type;
508 if (!calc_type.compare(
"PeakEtaPhiDistance"))
511 "etaToPhiBandwidthRatio");
512 return return_type(
new fftjet::PeakEtaPhiDistance(etaToPhiBandwidthRatio));
515 if (!calc_type.compare(
"PeakEtaDependentDistance"))
517 std::unique_ptr<fftjet::LinearInterpolator1d> interp =
520 const fftjet::LinearInterpolator1d* ip = interp.get();
522 return return_type(
nullptr);
525 const unsigned n = ip->nx();
526 const double*
data = ip->getData();
527 for (
unsigned i=0;
i<
n; ++
i)
529 return return_type(
nullptr);
530 if (ip->fLow() <= 0.0 || ip->fHigh() <= 0.0)
531 return return_type(
nullptr);
533 return return_type(
new fftjet::PeakEtaDependentDistance(*ip));
536 return return_type(
nullptr);
540 std::unique_ptr<fftjetcms::LinInterpolatedTable1D>
549 const std::vector<double>
data(
552 return std::unique_ptr<fftjetcms::LinInterpolatedTable1D>(
nullptr);
554 return std::unique_ptr<fftjetcms::LinInterpolatedTable1D>(
561 std::unique_ptr<fftjet::LinearInterpolator1d>
568 const std::vector<double>
data(
571 return std::unique_ptr<fftjet::LinearInterpolator1d>(
nullptr);
573 return std::unique_ptr<fftjet::LinearInterpolator1d>(
574 new fftjet::LinearInterpolator1d(
579 std::unique_ptr<fftjet::LinearInterpolator2d>
583 std::ifstream
in(file.c_str(),
587 <<
"Failed to open file " << file << std::endl;
588 fftjet::LinearInterpolator2d* ip = fftjet::LinearInterpolator2d::read(
in);
591 <<
"Failed to read file " << file << std::endl;
592 return std::unique_ptr<fftjet::LinearInterpolator2d>(ip);
596 std::unique_ptr<fftjet::Functor1<double,fftjet::Peak> >
599 typedef fftjet::Functor1<double,fftjet::Peak> ptr_type;
600 typedef std::unique_ptr<ptr_type> return_type;
604 if (!property_type.compare(
"Log"))
608 ptr_type* wr = wrapped.get();
611 return_type
result = return_type(
612 new fftjet::LogProperty<fftjet::Peak>(wr,
true));
618 if (!property_type.compare(
"PeakProperty"))
621 fftjet::JetProperty<fftjet::Peak>::JetMemberFunction
fcn;
624 new fftjet::JetProperty<fftjet::Peak>(fcn));
626 return return_type(
nullptr);
629 if (!property_type.compare(
"MinusScaledLaplacian"))
634 new fftjet::MinusScaledLaplacian<fftjet::Peak>(sx, sy));
637 if (!property_type.compare(
"ScaledHessianDet"))
640 new fftjet::ScaledHessianDet<fftjet::Peak>());
643 if (!property_type.compare(
"ScaledMagnitude"))
646 new fftjet::ScaledMagnitude<fftjet::Peak>());
649 if (!property_type.compare(
"ScaledMagnitude2"))
652 new fftjet::ScaledMagnitude2<fftjet::Peak>());
655 if (!property_type.compare(
"ConstDouble"))
661 if (!property_type.compare(
"ProportionalToScale"))
668 if (!property_type.compare(
"MultiplyByConst"))
670 const double factor = ps.
getParameter<
double>(
"factor");
673 ptr_type* ptr =
function.get();
676 return_type
result = return_type(
683 if (!property_type.compare(
"CompositeFunctor"))
685 std::unique_ptr<fftjet::Functor1<double,double> > fcn1 =
690 fftjet::Functor1<double,double>*
f1 = fcn1.get();
691 ptr_type*
f2 = fcn2.get();
694 return_type
result = return_type(
702 if (!property_type.compare(
"ProductFunctor"))
708 ptr_type*
f1 = fcn1.get();
709 ptr_type*
f2 = fcn2.get();
712 return_type
result = return_type(
720 if (!property_type.compare(
"MagnitudeDependent"))
722 std::unique_ptr<fftjet::Functor1<double,double> > fcn1 =
725 fftjet::Functor1<double,double>*
f1 = fcn1.get();
728 return_type
result = return_type(
735 if (!property_type.compare(
"PeakEtaDependent"))
737 std::unique_ptr<fftjet::Functor1<double,double> > fcn1 =
740 fftjet::Functor1<double,double>*
f1 = fcn1.get();
749 return return_type(
nullptr);
753 std::unique_ptr<fftjet::Functor1<double,fftjet::RecombinedJet<VectorLike> > >
756 typedef fftjet::Functor1<double,RecoFFTJet> ptr_type;
757 typedef std::unique_ptr<ptr_type> return_type;
761 if (!property_type.compare(
"Log"))
765 fftjet::Functor1<double,RecoFFTJet>* wr = wrapped.get();
768 return_type
result = return_type(
769 new fftjet::LogProperty<RecoFFTJet>(wr,
true));
775 if (!property_type.compare(
"JetEtaDependent"))
777 std::unique_ptr<fftjet::Functor1<double,double> > fcn1 =
780 fftjet::Functor1<double,double>*
f1 = fcn1.get();
789 if (!property_type.compare(
"JetProperty"))
792 fftjet::JetProperty<RecoFFTJet>::JetMemberFunction
fcn;
795 new fftjet::JetProperty<RecoFFTJet>(fcn));
797 return return_type(
nullptr);
800 if (!property_type.compare(
"ConstDouble"))
806 if (!property_type.compare(
"ProportionalToScale"))
813 if (!property_type.compare(
"MultiplyByConst"))
815 const double factor = ps.
getParameter<
double>(
"factor");
818 ptr_type* ptr =
function.get();
821 return_type
result = return_type(
828 if (!property_type.compare(
"CompositeFunctor"))
830 std::unique_ptr<fftjet::Functor1<double,double> > fcn1 =
835 fftjet::Functor1<double,double>*
f1 = fcn1.get();
836 ptr_type*
f2 = fcn2.get();
839 return_type
result = return_type(
847 if (!property_type.compare(
"ProductFunctor"))
853 ptr_type*
f1 = fcn1.get();
854 ptr_type*
f2 = fcn2.get();
857 return_type
result = return_type(
865 if (!property_type.compare(
"MagnitudeDependent"))
867 std::unique_ptr<fftjet::Functor1<double,double> > fcn1 =
870 fftjet::Functor1<double,double>*
f1 = fcn1.get();
873 return_type
result = return_type(
880 return return_type(
nullptr);
884 std::unique_ptr<fftjet::Functor2<double,
885 fftjet::RecombinedJet<VectorLike>,
886 fftjet::RecombinedJet<VectorLike> > >
889 typedef std::unique_ptr<fftjet::Functor2<
891 fftjet::RecombinedJet<VectorLike>,
892 fftjet::RecombinedJet<VectorLike> > > return_type;
897 if (!distance_type.compare(
"JetConvergenceDistance"))
907 return return_type(
nullptr);
911 std::unique_ptr<fftjet::Functor1<double,double> >
914 typedef std::unique_ptr<fftjet::Functor1<double,double> > return_type;
918 if (!fcn_type.compare(
"LinearInterpolator1d"))
920 std::unique_ptr<fftjet::LinearInterpolator1d>
p =
922 fftjet::LinearInterpolator1d* ptr = p.get();
926 return return_type(ptr);
930 if (!fcn_type.compare(
"LinInterpolatedTable1D"))
932 std::unique_ptr<fftjetcms::LinInterpolatedTable1D>
p =
938 return return_type(ptr);
942 if (!fcn_type.compare(
"Polynomial"))
944 std::vector<double> coeffs;
945 for (
unsigned i=0; ; ++
i)
947 std::ostringstream
s;
957 return return_type(
nullptr);
961 std::unique_ptr<AbsPileupCalculator>
964 typedef std::unique_ptr<AbsPileupCalculator> return_type;
968 if (!fcn_type.compare(
"EtaDependentPileup"))
970 std::unique_ptr<fftjet::LinearInterpolator2d> interp =
973 const double inputRhoFactor = ps.
getParameter<
double>(
"inputRhoFactor");
974 const double outputRhoFactor = ps.
getParameter<
double>(
"outputRhoFactor");
976 const fftjet::LinearInterpolator2d* ip = interp.get();
979 *ip, inputRhoFactor, outputRhoFactor));
981 return return_type(
nullptr);
984 if (!fcn_type.compare(
"PileupGrid2d"))
986 std::unique_ptr<fftjet::Grid2d<Real> >
grid =
989 const double rhoFactor = ps.
getParameter<
double>(
"rhoFactor");
991 const fftjet::Grid2d<Real>*
g = grid.get();
995 return return_type(
nullptr);
998 return return_type(
nullptr);
1002 std::unique_ptr<fftjet::JetMagnitudeMapper2d <fftjet::Peak> >
1005 std::unique_ptr<fftjet::LinearInterpolator2d> responseCurve =
1009 const double minPredictor = ps.
getParameter<
double>(
"minPredictor");
1010 const double maxPredictor = ps.
getParameter<
double>(
"maxPredictor");
1011 const unsigned nPredPoints = ps.
getParameter<
unsigned>(
"nPredPoints");
1012 const double maxMagnitude = ps.
getParameter<
double>(
"maxMagnitude");
1013 const unsigned nMagPoints = ps.
getParameter<
unsigned>(
"nMagPoints");
1015 return (std::unique_ptr<fftjet::JetMagnitudeMapper2d<fftjet::Peak> >
1016 (
new fftjet::JetMagnitudeMapper2d<fftjet::Peak>(
1019 true,minPredictor,maxPredictor,nPredPoints,
1020 maxMagnitude,nMagPoints)));
1024 std::unique_ptr<fftjet::JetMagnitudeMapper2d <fftjet::RecombinedJet<VectorLike> > >
1027 std::unique_ptr<fftjet::LinearInterpolator2d> responseCurve =
1031 const double minPredictor = ps.
getParameter<
double>(
"minPredictor");
1032 const double maxPredictor = ps.
getParameter<
double>(
"maxPredictor");
1033 const unsigned nPredPoints = ps.
getParameter<
unsigned>(
"nPredPoints");
1034 const double maxMagnitude = ps.
getParameter<
double>(
"maxMagnitude");
1035 const unsigned nMagPoints = ps.
getParameter<
unsigned>(
"nMagPoints");
1037 return (std::unique_ptr<fftjet::JetMagnitudeMapper2d<RecoFFTJet> >
1038 (
new fftjet::JetMagnitudeMapper2d<RecoFFTJet>(
1041 true,minPredictor,maxPredictor,nPredPoints,
1042 maxMagnitude,nMagPoints)));
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< fftjetcms::LinInterpolatedTable1D > fftjet_LinInterpolatedTable1D_parser(const edm::ParameterSet &ps)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)
std::unique_ptr< fftjet::LinearInterpolator2d > fftjet_LinearInterpolator2d_parser(const edm::ParameterSet &ps)
std::unique_ptr< AbsBgFunctor > fftjet_BgFunctor_parser(const edm::ParameterSet &ps)
std::unique_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
std::unique_ptr< fftjet::JetMagnitudeMapper2d< fftjet::Peak > > fftjet_PeakMagnitudeMapper2d_parser(const edm::ParameterSet &ps)
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
std::unique_ptr< fftjet::Functor2< double, fftjet::RecombinedJet< VectorLike >, fftjet::RecombinedJet< VectorLike > > > fftjet_JetDistance_parser(const edm::ParameterSet &ps)
fftjet::RecombinedJet< VectorLike > RecoFFTJet
std::unique_ptr< fftjet::JetMagnitudeMapper2d< fftjet::RecombinedJet< VectorLike > > > fftjet_JetMagnitudeMapper2d_parser(const edm::ParameterSet &ps)
std::unique_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)
static bool parse_peak_member_function(const char *fname, fftjet::JetProperty< fftjet::Peak >::JetMemberFunction *f)
#define make_param(type, varname)
std::unique_ptr< fftjet::AbsDistanceCalculator< fftjet::Peak > > fftjet_DistanceCalculator_parser(const edm::ParameterSet &ps)
std::unique_ptr< AbsPileupCalculator > fftjet_PileupCalculator_parser(const edm::ParameterSet &ps)
std::unique_ptr< fftjet::Functor1< double, double > > fftjet_Function_parser(const edm::ParameterSet &ps)
void fcn(int &, double *, double &, double *, int)
char data[epos_bytes_allocation]
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)
static bool parse_jet_member_function(const char *fname, fftjet::JetProperty< RecoFFTJet >::JetMemberFunction *f)
std::unique_ptr< fftjet::ClusteringTreeSparsifier< fftjet::Peak, long > > fftjet_ClusteringTreeSparsifier_parser(const edm::ParameterSet &ps)
std::unique_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
std::unique_ptr< fftjet::LinearInterpolator1d > fftjet_LinearInterpolator1d_parser(const edm::ParameterSet &ps)
std::string className(const T &t)
std::unique_ptr< fftjet::ScaleSpaceKernel > fftjet_MembershipFunction_parser(const edm::ParameterSet &ps)