Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
CommonTools
CandUtils
interface
CompositeCandSelector.h
Go to the documentation of this file.
1
#ifndef CommonTools_CandUtils_CompositeCandSelector_h
2
#define CommonTools_CandUtils_CompositeCandSelector_h
3
#include "
DataFormats/Candidate/interface/Candidate.h
"
4
#include "
FWCore/Utilities/interface/EDMException.h
"
5
6
template
<
typename
Selector,
typename
T1 = reco::Cand
id
ate,
typename
T2 = T1,
unsigned
int
nDau = 2>
7
class
CompositeCandSelector
{
8
public
:
9
explicit
CompositeCandSelector
(
const
Selector
&
select
) :
select_
(select) {}
10
bool
operator()
(
const
reco::Candidate
&cmp)
const
{
11
if
(cmp.
numberOfDaughters
() != nDau)
12
throw
edm::Exception
(
edm::errors::InvalidReference
)
13
<<
"candidate has "
<< cmp.
numberOfDaughters
() <<
", while CompositeCandSelector "
14
<<
"requires "
<< nDau <<
" daughters.\n"
;
15
const
T1 *dau1 =
dynamic_cast<
const
T1 *
>
(cmp.
daughter
(0));
16
if
(dau1 ==
nullptr
)
17
throw
edm::Exception
(
edm::errors::InvalidReference
) <<
"candidate's first daughter is not of the type required "
18
<<
"by CompositeCandSelector.\n"
;
19
const
T2 *dau2 =
dynamic_cast<
const
T2 *
>
(cmp.
daughter
(1));
20
if
(dau2 ==
nullptr
)
21
throw
edm::Exception
(
edm::errors::InvalidReference
) <<
"candidate's second daughter is not of the type required "
22
<<
"by CompositeCandSelector.\n"
;
23
return
select_
(*dau1, *dau2);
24
}
25
26
private
:
27
Selector
select_
;
28
};
29
30
// specializations for nDau = 3, 4, ... could go here if needed
31
32
#endif
reco::Candidate::daughter
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
CompositeCandSelector::CompositeCandSelector
CompositeCandSelector(const Selector &select)
Definition:
CompositeCandSelector.h:9
CompositeCandSelector
Definition:
CompositeCandSelector.h:7
Exception
Definition:
hltDiff.cc:245
reco::Candidate
Definition:
Candidate.h:27
Candidate.h
reco::Candidate::numberOfDaughters
virtual size_type numberOfDaughters() const =0
number of daughters
EDMException.h
edm::Exception
Definition:
EDMException.h:79
CompositeCandSelector::select_
Selector select_
Definition:
CompositeCandSelector.h:27
PixelPluginsPhase0_cfi.select
tuple select
Definition:
PixelPluginsPhase0_cfi.py:16
CompositeCandSelector::operator()
bool operator()(const reco::Candidate &cmp) const
Definition:
CompositeCandSelector.h:10
Selector
Functor that operates on <T>
Definition:
Selector.h:22
edm::errors::InvalidReference
Definition:
EDMException.h:39
Generated for CMSSW Reference Manual by
1.8.5