CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes
FFTJetDijetFilter Class Reference

#include <RecoJets/FFTJetProducers/plugins/FFTJetDijetFilter.cc>

Inheritance diagram for FFTJetDijetFilter:
edm::EDFilter edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef fftjet::ProximityClusteringTree< fftjet::Peak, long > ClusteringTree
 
typedef fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
 
- Public Types inherited from edm::EDFilter
typedef EDFilter ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 FFTJetDijetFilter (const edm::ParameterSet &)
 
 ~FFTJetDijetFilter () override
 
- Public Member Functions inherited from edm::EDFilter
 EDFilter ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilter () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

typedef reco::PattRecoTree< float, reco::PattRecoPeak< float > > StoredTree
 

Private Member Functions

void beginJob () override
 
template<class Ptr >
void checkConfig (const Ptr &ptr, const char *message) const
 
void endJob () override
 
 FFTJetDijetFilter ()=delete
 
 FFTJetDijetFilter (const FFTJetDijetFilter &)=delete
 
bool filter (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
FFTJetDijetFilteroperator= (const FFTJetDijetFilter &)=delete
 
double peakPt (const fftjet::Peak &peak) const
 

Private Attributes

ClusteringTreeclusteringTree
 
double completeEventScale
 
std::unique_ptr< fftjet::AbsDistanceCalculator< fftjet::Peak > > distanceCalc
 
double fixedScale
 
std::unique_ptr< std::vector< double > > iniScales
 
bool insertCompleteEvent
 
double maxPeakEta
 
double maxThirdJetFraction
 
double min1to0PtRatio
 
double minDeltaPhi
 
double minPt0
 
double minPt1
 
std::vector< unsigned > nodes
 
unsigned long nPassed
 
unsigned long nRejected
 
std::vector< fftjet::Peak > peaks
 
double ptConversionFactor
 
SparseTreesparseTree
 
edm::InputTag treeLabel
 
edm::EDGetTokenT< StoredTreetreeToken
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDFilter
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Description: selects good dijet events looking only at the clustering tree

Implementation: [Notes on implementation]

Definition at line 51 of file FFTJetDijetFilter.cc.

Member Typedef Documentation

typedef fftjet::ProximityClusteringTree<fftjet::Peak,long> FFTJetDijetFilter::ClusteringTree

Definition at line 54 of file FFTJetDijetFilter.cc.

typedef fftjet::SparseClusteringTree<fftjet::Peak,long> FFTJetDijetFilter::SparseTree

Definition at line 55 of file FFTJetDijetFilter.cc.

Definition at line 61 of file FFTJetDijetFilter.cc.

Constructor & Destructor Documentation

FFTJetDijetFilter::FFTJetDijetFilter ( const edm::ParameterSet ps)
explicit

Definition at line 124 of file FFTJetDijetFilter.cc.

References checkConfig(), clusteringTree, distanceCalc, fftjetcms::fftjet_DistanceCalculator_parser(), fftjetcms::fftjet_ScaleSet_parser(), edm::ParameterSet::getParameter(), iniScales, jetUpdater_cfi::sort, sparseTree, fftjetdijetfilter_cfi::TreeDistanceCalculator, treeLabel, and treeToken.

127  init_param(double, fixedScale),
129  init_param(double, min1to0PtRatio),
130  init_param(double, minDeltaPhi),
132  init_param(double, minPt0),
133  init_param(double, minPt1),
134  init_param(double, maxPeakEta),
136  clusteringTree(nullptr),
137  sparseTree(nullptr)
138 {
139  // Parse the set of scales
141  ps.getParameter<edm::ParameterSet>("InitialScales"));
142  checkConfig(iniScales, "invalid set of scales");
143  std::sort(iniScales->begin(), iniScales->end(), std::greater<double>());
144 
145  // Parse the distance calculator
147  ps.getParameter<edm::ParameterSet>("TreeDistanceCalculator"));
149  checkConfig(distanceCalc, "invalid tree distance calculator");
150 
151  // Create the clustering tree
153  sparseTree = new SparseTree();
154 
155  treeToken = consumes<StoredTree>(treeLabel);
156 }
T getParameter(std::string const &) const
#define init_param(type, varname)
std::unique_ptr< std::vector< double > > iniScales
fftjet::ProximityClusteringTree< fftjet::Peak, long > ClusteringTree
fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
edm::EDGetTokenT< StoredTree > treeToken
std::unique_ptr< fftjet::AbsDistanceCalculator< fftjet::Peak > > fftjet_DistanceCalculator_parser(const edm::ParameterSet &ps)
ClusteringTree * clusteringTree
std::unique_ptr< fftjet::AbsDistanceCalculator< fftjet::Peak > > distanceCalc
void checkConfig(const Ptr &ptr, const char *message) const
edm::InputTag treeLabel
std::unique_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
FFTJetDijetFilter::~FFTJetDijetFilter ( )
override

Definition at line 159 of file FFTJetDijetFilter.cc.

References clusteringTree, and sparseTree.

160 {
161  delete sparseTree;
162  delete clusteringTree;
163 }
ClusteringTree * clusteringTree
FFTJetDijetFilter::FFTJetDijetFilter ( )
privatedelete
FFTJetDijetFilter::FFTJetDijetFilter ( const FFTJetDijetFilter )
privatedelete

Member Function Documentation

void FFTJetDijetFilter::beginJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDFilter.

Definition at line 166 of file FFTJetDijetFilter.cc.

References nPassed, and nRejected.

167 {
168  nPassed = 0;
169  nRejected = 0;
170 }
unsigned long nRejected
template<class Ptr >
void FFTJetDijetFilter::checkConfig ( const Ptr &  ptr,
const char *  message 
) const
inlineprivate

Definition at line 72 of file FFTJetDijetFilter.cc.

Referenced by FFTJetDijetFilter().

73  {
74  if (ptr.get() == nullptr)
75  throw cms::Exception("FFTJetBadConfig") << message << std::endl;
76  }
void FFTJetDijetFilter::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDFilter.

Definition at line 173 of file FFTJetDijetFilter.cc.

174 {
175 // std::cout << "In FTJetDijetFilter::endJob: nPassed = " << nPassed
176 // << ", nRejected = " << nRejected << std::endl;
177 }
bool FFTJetDijetFilter::filter ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 181 of file FFTJetDijetFilter.cc.

References funct::abs(), clusteringTree, completeEventScale, DEFINE_FWK_MODULE, reco::deltaPhi(), fftjetcms::densePeakTreeFromStorable(), PVValHelper::eta, fixedScale, edm::Event::getByToken(), mps_fire::i, iniScales, input, insertCompleteEvent, reco::PattRecoTree< ScaleType, Cluster >::isSparse(), maxPeakEta, maxThirdJetFraction, min1to0PtRatio, minDeltaPhi, minPt0, minPt1, nodes, nPassed, nRejected, peakPt(), peaks, phi, hiDetachedQuadStep_cff::pt1, jetUpdater_cfi::sort, fftjetcms::sparsePeakTreeFromStorable(), sparseTree, and treeToken.

183 {
185  iEvent.getByToken(treeToken, input);
186 
187  // Convert the stored tree into a normal FFTJet clustering tree
188  // and extract the set of peaks at the requested scale
189  const double eventScale = insertCompleteEvent ? completeEventScale : 0.0;
190  if (input->isSparse())
191  {
193  eventScale, sparseTree);
194  sparseTree->sortNodes();
195  fftjet::updateSplitMergeTimes(*sparseTree, sparseTree->minScale(),
196  sparseTree->maxScale());
197  const unsigned usedLevel = sparseTree->getLevel(fixedScale);
198  sparseTree->getLevelNodes(usedLevel, &nodes);
199  const unsigned numNodes = nodes.size();
200  peaks.clear();
201  peaks.reserve(numNodes);
202  for (unsigned i=0; i<numNodes; ++i)
203  peaks.push_back(sparseTree->uncheckedNode(nodes[i]).getCluster());
204  }
205  else
206  {
207  densePeakTreeFromStorable(*input, iniScales.get(),
208  eventScale, clusteringTree);
209  const unsigned usedLevel = clusteringTree->getLevel(fixedScale);
210  double actualScale = 0.0;
211  long dummyInfo;
212  clusteringTree->getLevelData(usedLevel,&actualScale,&peaks,&dummyInfo);
213  }
214 
215  // Get out if we don't have two clusters
216  const unsigned nClusters = peaks.size();
217  if (nClusters < 2)
218  {
219  ++nRejected;
220  return false;
221  }
222  std::sort(peaks.begin(), peaks.end(), std::greater<fftjet::Peak>());
223 
224  // Calculate all quantities needed to make the pass/fail decision
225  const double pt0 = peakPt(peaks[0]);
226  const double pt1 = peakPt(peaks[1]);
227  const double dphi = reco::deltaPhi(peaks[0].phi(), peaks[1].phi());
228  const double ptratio = pt1/pt0;
229  double thirdJetFraction = 0.0;
230  if (nClusters > 2)
231  thirdJetFraction = peakPt(peaks[2])/(pt0 + pt1);
232 
233  // Calculate the cut
234  const bool pass = pt0 > minPt0 &&
235  pt1 > minPt1 &&
236  ptratio > min1to0PtRatio &&
237  std::abs(dphi) > minDeltaPhi &&
238  thirdJetFraction < maxThirdJetFraction &&
239  std::abs(peaks[0].eta()) < maxPeakEta &&
240  std::abs(peaks[1].eta()) < maxPeakEta;
241  if (pass)
242  ++nPassed;
243  else
244  ++nRejected;
245  return pass;
246 }
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
std::vector< fftjet::Peak > peaks
bool isSparse() const
Definition: PattRecoTree.h:28
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::unique_ptr< std::vector< double > > iniScales
static std::string const input
Definition: EdmProvDump.cc:48
std::vector< unsigned > nodes
edm::EDGetTokenT< StoredTree > treeToken
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ClusteringTree * clusteringTree
void sparsePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::SparseClusteringTree< fftjet::Peak, long > *out)
unsigned long nRejected
void densePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::AbsClusteringTree< fftjet::Peak, long > *out)
double peakPt(const fftjet::Peak &peak) const
FFTJetDijetFilter& FFTJetDijetFilter::operator= ( const FFTJetDijetFilter )
privatedelete
double FFTJetDijetFilter::peakPt ( const fftjet::Peak &  peak) const
inlineprivate

Definition at line 78 of file FFTJetDijetFilter.cc.

References fftjetdijetfilter_cfi::ptConversionFactor, and alignCSCRings::s.

Referenced by filter().

79  {
80  const double s = peak.scale();
81  return ptConversionFactor*s*s*peak.magnitude();
82  }

Member Data Documentation

ClusteringTree* FFTJetDijetFilter::clusteringTree
private

Definition at line 104 of file FFTJetDijetFilter.cc.

Referenced by FFTJetDijetFilter(), filter(), and ~FFTJetDijetFilter().

double FFTJetDijetFilter::completeEventScale
private

Definition at line 88 of file FFTJetDijetFilter.cc.

Referenced by filter().

std::unique_ptr<fftjet::AbsDistanceCalculator<fftjet::Peak> > FFTJetDijetFilter::distanceCalc
private

Definition at line 98 of file FFTJetDijetFilter.cc.

Referenced by FFTJetDijetFilter().

double FFTJetDijetFilter::fixedScale
private

Definition at line 87 of file FFTJetDijetFilter.cc.

Referenced by filter().

std::unique_ptr<std::vector<double> > FFTJetDijetFilter::iniScales
private

Definition at line 101 of file FFTJetDijetFilter.cc.

Referenced by FFTJetDijetFilter(), and filter().

bool FFTJetDijetFilter::insertCompleteEvent
private

Definition at line 95 of file FFTJetDijetFilter.cc.

Referenced by filter().

double FFTJetDijetFilter::maxPeakEta
private

Definition at line 94 of file FFTJetDijetFilter.cc.

Referenced by filter().

double FFTJetDijetFilter::maxThirdJetFraction
private

Definition at line 91 of file FFTJetDijetFilter.cc.

Referenced by filter().

double FFTJetDijetFilter::min1to0PtRatio
private

Definition at line 89 of file FFTJetDijetFilter.cc.

Referenced by filter().

double FFTJetDijetFilter::minDeltaPhi
private

Definition at line 90 of file FFTJetDijetFilter.cc.

Referenced by filter().

double FFTJetDijetFilter::minPt0
private

Definition at line 92 of file FFTJetDijetFilter.cc.

Referenced by filter().

double FFTJetDijetFilter::minPt1
private

Definition at line 93 of file FFTJetDijetFilter.cc.

Referenced by filter().

std::vector<unsigned> FFTJetDijetFilter::nodes
private

Definition at line 111 of file FFTJetDijetFilter.cc.

Referenced by filter().

unsigned long FFTJetDijetFilter::nPassed
private

Definition at line 114 of file FFTJetDijetFilter.cc.

Referenced by beginJob(), and filter().

unsigned long FFTJetDijetFilter::nRejected
private

Definition at line 115 of file FFTJetDijetFilter.cc.

Referenced by beginJob(), and filter().

std::vector<fftjet::Peak> FFTJetDijetFilter::peaks
private

Definition at line 108 of file FFTJetDijetFilter.cc.

Referenced by filter().

double FFTJetDijetFilter::ptConversionFactor
private

Definition at line 86 of file FFTJetDijetFilter.cc.

SparseTree* FFTJetDijetFilter::sparseTree
private

Definition at line 105 of file FFTJetDijetFilter.cc.

Referenced by FFTJetDijetFilter(), filter(), and ~FFTJetDijetFilter().

edm::InputTag FFTJetDijetFilter::treeLabel
private

Definition at line 85 of file FFTJetDijetFilter.cc.

Referenced by FFTJetDijetFilter().

edm::EDGetTokenT<StoredTree> FFTJetDijetFilter::treeToken
private

Definition at line 117 of file FFTJetDijetFilter.cc.

Referenced by FFTJetDijetFilter(), and filter().