CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes
CandCombinerBase< OutputCollection, CandPtr > Class Template Referenceabstract

#include <CandCombinerBase.h>

Public Types

typedef std::vector< std::string > vstring
 

Public Member Functions

 CandCombinerBase (bool checkCharge, bool checkOverlap, const std::vector< int > &, const std::string="")
 constructor from a selector, specifying optionally to check for charge More...
 
 CandCombinerBase (const std::string="")
 default construct More...
 
 CandCombinerBase (int, int, const std::string="")
 construct from two charge values More...
 
 CandCombinerBase (int, int, int, const std::string="")
 construct from three charge values More...
 
 CandCombinerBase (int, int, int, int, const std::string="")
 construct from four charge values More...
 
std::unique_ptr< OutputCollection > combine (const edm::Handle< reco::CandidateView > &, const edm::Handle< reco::CandidateView > &, const edm::Handle< reco::CandidateView > &, const edm::Handle< reco::CandidateView > &, const vstring &=vstring()) const
 return all selected candidate pairs More...
 
std::unique_ptr< OutputCollection > combine (const edm::Handle< reco::CandidateView > &, const edm::Handle< reco::CandidateView > &, const edm::Handle< reco::CandidateView > &, const vstring &=vstring()) const
 return all selected candidate pairs More...
 
std::unique_ptr< OutputCollection > combine (const edm::Handle< reco::CandidateView > &, const edm::Handle< reco::CandidateView > &, const vstring &=vstring()) const
 return all selected candidate pairs More...
 
std::unique_ptr< OutputCollection > combine (const edm::Handle< reco::CandidateView > &, const vstring &=vstring()) const
 return all selected candidate pairs More...
 
std::unique_ptr< OutputCollection > combine (const std::vector< edm::Handle< reco::CandidateView > > &, const vstring &=vstring()) const
 return all selected candidate pairs More...
 
virtual ~CandCombinerBase ()
 destructor More...
 

Private Types

typedef std::vector< std::pair< std::pair< CandPtr, size_t >, std::vector< edm::Handle< reco::CandidateView > >::const_iterator > > CandStack
 temporary candidate stack More...
 
typedef std::vector< int > ChargeStack
 

Private Member Functions

virtual void addDaughter (typename OutputCollection::value_type &cmp, const CandPtr &c, const std::string="") const =0
 add candidate daughter More...
 
void combine (size_t collectionIndex, CandStack &, ChargeStack &, std::vector< edm::Handle< reco::CandidateView > >::const_iterator begin, std::vector< edm::Handle< reco::CandidateView > >::const_iterator end, OutputCollection *comps, const vstring &name=vstring()) const
 returns a composite candidate combined from two daughters More...
 
void combine (typename OutputCollection::value_type &, const CandPtr &, const CandPtr &, const std::string="", const std::string="") const
 returns a composite candidate combined from two daughters More...
 
bool preselect (const reco::Candidate &, const reco::Candidate &) const
 verify that the two candidate don't overlap and check charge More...
 
virtual bool select (const reco::Candidate &) const =0
 select a candidate More...
 
virtual bool selectPair (const reco::Candidate &c1, const reco::Candidate &c2) const =0
 select a candidate pair More...
 
virtual void setup (typename OutputCollection::value_type &) const =0
 set kinematics to reconstructed composite More...
 

Private Attributes

bool checkCharge_
 flag to specify the checking of electric charge More...
 
bool checkOverlap_
 flag to specify the checking of overlaps More...
 
std::vector< int > dauCharge_
 electric charges of the daughters More...
 
std::string name_
 composite name (if applies) More...
 
OverlapChecker overlap_
 utility to check candidate daughters overlap More...
 

Detailed Description

template<typename OutputCollection, typename CandPtr>
class CandCombinerBase< OutputCollection, CandPtr >

Author
Luca Lista, INFN

Definition at line 14 of file CandCombinerBase.h.

Member Typedef Documentation

◆ CandStack

template<typename OutputCollection, typename CandPtr>
typedef std::vector< std::pair<std::pair<CandPtr, size_t>, std::vector<edm::Handle<reco::CandidateView> >::const_iterator> > CandCombinerBase< OutputCollection, CandPtr >::CandStack
private

temporary candidate stack

Definition at line 63 of file CandCombinerBase.h.

◆ ChargeStack

template<typename OutputCollection, typename CandPtr>
typedef std::vector<int> CandCombinerBase< OutputCollection, CandPtr >::ChargeStack
private

Definition at line 64 of file CandCombinerBase.h.

◆ vstring

template<typename OutputCollection, typename CandPtr>
typedef std::vector<std::string> CandCombinerBase< OutputCollection, CandPtr >::vstring

Definition at line 16 of file CandCombinerBase.h.

Constructor & Destructor Documentation

◆ CandCombinerBase() [1/5]

template<typename OutputCollection , typename CandPtr >
CandCombinerBase< OutputCollection, CandPtr >::CandCombinerBase ( const std::string  name = "")
explicit

default construct

Definition at line 96 of file CandCombinerBase.h.

97  : checkCharge_(false), checkOverlap_(true), dauCharge_(), overlap_(), name_(name) {}

◆ CandCombinerBase() [2/5]

template<typename OutputCollection , typename CandPtr >
CandCombinerBase< OutputCollection, CandPtr >::CandCombinerBase ( int  q1,
int  q2,
const std::string  name = "" 
)

construct from two charge values

Definition at line 100 of file CandCombinerBase.h.

101  : checkCharge_(true), checkOverlap_(true), dauCharge_(2), overlap_(), name_(name) {
102  dauCharge_[0] = q1;
103  dauCharge_[1] = q2;
104 }

◆ CandCombinerBase() [3/5]

template<typename OutputCollection , typename CandPtr >
CandCombinerBase< OutputCollection, CandPtr >::CandCombinerBase ( int  q1,
int  q2,
int  q3,
const std::string  name = "" 
)

construct from three charge values

Definition at line 107 of file CandCombinerBase.h.

108  : checkCharge_(true), checkOverlap_(true), dauCharge_(3), overlap_(), name_(name) {
109  dauCharge_[0] = q1;
110  dauCharge_[1] = q2;
111  dauCharge_[2] = q3;
112 }

◆ CandCombinerBase() [4/5]

template<typename OutputCollection , typename CandPtr >
CandCombinerBase< OutputCollection, CandPtr >::CandCombinerBase ( int  q1,
int  q2,
int  q3,
int  q4,
const std::string  name = "" 
)

construct from four charge values

Definition at line 115 of file CandCombinerBase.h.

116  : checkCharge_(true), checkOverlap_(true), dauCharge_(4), overlap_(), name_(name) {
117  dauCharge_[0] = q1;
118  dauCharge_[1] = q2;
119  dauCharge_[2] = q3;
120  dauCharge_[3] = q4;
121 }

◆ CandCombinerBase() [5/5]

template<typename OutputCollection , typename CandPtr >
CandCombinerBase< OutputCollection, CandPtr >::CandCombinerBase ( bool  checkCharge,
bool  checkOverlap,
const std::vector< int > &  dauCharge,
const std::string  name = "" 
)

constructor from a selector, specifying optionally to check for charge

Definition at line 124 of file CandCombinerBase.h.

◆ ~CandCombinerBase()

template<typename OutputCollection , typename CandPtr >
CandCombinerBase< OutputCollection, CandPtr >::~CandCombinerBase ( )
virtual

destructor

Definition at line 131 of file CandCombinerBase.h.

131 {}

Member Function Documentation

◆ addDaughter()

template<typename OutputCollection, typename CandPtr>
virtual void CandCombinerBase< OutputCollection, CandPtr >::addDaughter ( typename OutputCollection::value_type &  cmp,
const CandPtr &  c,
const std::string  = "" 
) const
privatepure virtual

◆ combine() [1/7]

template<typename OutputCollection , typename CandPtr >
std::unique_ptr< OutputCollection > CandCombinerBase< OutputCollection, CandPtr >::combine ( const edm::Handle< reco::CandidateView > &  src1,
const edm::Handle< reco::CandidateView > &  src2,
const edm::Handle< reco::CandidateView > &  src3,
const edm::Handle< reco::CandidateView > &  src4,
const vstring names = vstring() 
) const

return all selected candidate pairs

Definition at line 286 of file CandCombinerBase.h.

291  {
292  std::vector<edm::Handle<reco::CandidateView> > src;
293  src.push_back(src1);
294  src.push_back(src2);
295  src.push_back(src3);
296  src.push_back(src4);
297  return combine(src, names);
298 }

◆ combine() [2/7]

template<typename OutputCollection , typename CandPtr >
std::unique_ptr< OutputCollection > CandCombinerBase< OutputCollection, CandPtr >::combine ( const edm::Handle< reco::CandidateView > &  src1,
const edm::Handle< reco::CandidateView > &  src2,
const edm::Handle< reco::CandidateView > &  src3,
const vstring names = vstring() 
) const

return all selected candidate pairs

Definition at line 273 of file CandCombinerBase.h.

277  {
278  std::vector<edm::Handle<reco::CandidateView> > src;
279  src.push_back(src1);
280  src.push_back(src2);
281  src.push_back(src3);
282  return combine(src, names);
283 }

◆ combine() [3/7]

template<typename OutputCollection , typename CandPtr >
std::unique_ptr< OutputCollection > CandCombinerBase< OutputCollection, CandPtr >::combine ( const edm::Handle< reco::CandidateView > &  src1,
const edm::Handle< reco::CandidateView > &  src2,
const vstring names = vstring() 
) const

return all selected candidate pairs

Definition at line 262 of file CandCombinerBase.h.

265  {
266  std::vector<edm::Handle<reco::CandidateView> > src;
267  src.push_back(src1);
268  src.push_back(src2);
269  return combine(src, names);
270 }

◆ combine() [4/7]

template<typename OutputCollection , typename CandPtr >
std::unique_ptr< OutputCollection > CandCombinerBase< OutputCollection, CandPtr >::combine ( const edm::Handle< reco::CandidateView > &  src,
const vstring names = vstring() 
) const

return all selected candidate pairs

Definition at line 224 of file CandCombinerBase.h.

225  {
226  if (checkCharge_ && dauCharge_.size() != 2)
228  << "CandCombiner: trying to combine 2 collections"
229  << " but configured to check against " << dauCharge_.size() << " charges.";
230 
231  std::unique_ptr<OutputCollection> comps(new OutputCollection);
232  size_t namesSize = names.size();
233  std::string name1, name2;
234  if (namesSize > 0) {
235  if (namesSize != 2)
236  throw edm::Exception(edm::errors::Configuration) << "CandCombiner: should specify exactly two "
237  << " names in configuration (" << namesSize << " specified).\n";
238  name1 = names[0];
239  name2 = names[1];
240  }
241  const reco::CandidateView &cands = *src;
242  const size_t n = cands.size();
243  for (size_t i1 = 0; i1 < n; ++i1) {
244  const reco::Candidate &c1 = cands[i1];
245  CandPtr cr1(src, i1);
246  for (size_t i2 = i1 + 1; i2 < n; ++i2) {
247  const reco::Candidate &c2 = cands[i2];
248  if (preselect(c1, c2)) {
249  CandPtr cr2(src, i2);
251  combine(c, cr1, cr2, name1, name2);
252  if (select(c))
253  comps->push_back(c);
254  }
255  }
256  }
257 
258  return comps;
259 }

◆ combine() [5/7]

template<typename OutputCollection , typename CandPtr >
std::unique_ptr< OutputCollection > CandCombinerBase< OutputCollection, CandPtr >::combine ( const std::vector< edm::Handle< reco::CandidateView > > &  src,
const vstring names = vstring() 
) const

return all selected candidate pairs

Definition at line 159 of file CandCombinerBase.h.

160  {
161  size_t srcSize = src.size();
162  if (checkCharge_ && dauCharge_.size() != srcSize)
164  << "CandCombiner: trying to combine " << srcSize << " collections"
165  << " but configured to check against " << dauCharge_.size() << " charges.";
166  std::unique_ptr<OutputCollection> comps(new OutputCollection);
167  size_t namesSize = names.size();
168  if (srcSize == 2) {
169  std::string name1 = "", name2 = "";
170  if (namesSize > 0) {
171  if (namesSize != 2)
173  << "CandCombiner: should specify exactly two "
174  << " names in configuration (" << namesSize << " specified).\n";
175  name1 = names[0];
176  name2 = names[1];
177  }
178  edm::Handle<reco::CandidateView> src1 = src[0], src2 = src[1];
179  if (src1.id() == src2.id()) {
180  const reco::CandidateView &cands = *src1;
181  const size_t n = cands.size();
182  for (size_t i1 = 0; i1 < n; ++i1) {
183  const reco::Candidate &c1 = cands[i1];
184  CandPtr cr1(src1, i1);
185  for (size_t i2 = i1 + 1; i2 < n; ++i2) {
186  const reco::Candidate &c2 = cands[i2];
187  if (preselect(c1, c2)) {
188  CandPtr cr2(src2, i2);
190  combine(c, cr1, cr2, name1, name2);
191  if (select(c))
192  comps->push_back(c);
193  }
194  }
195  }
196  } else {
197  const reco::CandidateView &cands1 = *src1, &cands2 = *src2;
198  const size_t n1 = cands1.size(), n2 = cands2.size();
199  for (size_t i1 = 0; i1 < n1; ++i1) {
200  const reco::Candidate &c1 = cands1[i1];
201  CandPtr cr1(src1, i1);
202  for (size_t i2 = 0; i2 < n2; ++i2) {
203  const reco::Candidate &c2 = cands2[i2];
204  if (preselect(c1, c2)) {
205  CandPtr cr2(src2, i2);
207  combine(c, cr1, cr2, name1, name2);
208  if (select(c))
209  comps->push_back(c);
210  }
211  }
212  }
213  }
214  } else {
216  ChargeStack qStack;
217  combine(0, stack, qStack, src.begin(), src.end(), comps.get(), names);
218  }
219 
220  return comps;
221 }

◆ combine() [6/7]

template<typename OutputCollection, typename CandPtr>
void CandCombinerBase< OutputCollection, CandPtr >::combine ( size_t  collectionIndex,
CandStack stack,
ChargeStack qStack,
std::vector< edm::Handle< reco::CandidateView > >::const_iterator  begin,
std::vector< edm::Handle< reco::CandidateView > >::const_iterator  end,
OutputCollection *  comps,
const vstring name = vstring() 
) const
private

returns a composite candidate combined from two daughters

Definition at line 301 of file CandCombinerBase.h.

308  {
309  if (collBegin == collEnd) {
310  static const int undetermined = 0, sameDecay = 1, conjDecay = -1, wrongDecay = 2;
311  int decayType = undetermined;
312  if (checkCharge_) {
313  assert(qStack.size() == stack.size());
314  for (size_t i = 0; i < qStack.size(); ++i) {
315  int q = qStack[i], dq = dauCharge_[i];
316  if (decayType == undetermined) {
317  if (q != 0 && dq != 0) {
318  if (q == dq)
319  decayType = sameDecay;
320  else if (q == -dq)
321  decayType = conjDecay;
322  else
323  decayType = wrongDecay;
324  }
325  } else if ((decayType == sameDecay && q != dq) || (decayType == conjDecay && q != -dq)) {
326  decayType = wrongDecay;
327  }
328  if (decayType == wrongDecay)
329  break;
330  }
331  }
332  if (decayType != wrongDecay) {
334  size_t nameIndex = 0;
335  for (typename CandStack::const_iterator i = stack.begin(); i != stack.end(); ++i, ++nameIndex) {
336  if (!names.empty())
337  addDaughter(c, i->first.first, names[nameIndex]);
338  else
339  addDaughter(c, i->first.first);
340  }
341  setup(c);
342  if (select(c))
343  comps->push_back(c);
344  }
345  } else {
346  const edm::Handle<reco::CandidateView> &srcRef = *collBegin;
347  const reco::CandidateView &src = *srcRef;
348  size_t candBegin = 0, candEnd = src.size();
349  for (typename CandStack::const_iterator i = stack.begin(); i != stack.end(); ++i)
350  if (srcRef.id() == i->second->id())
351  candBegin = i->first.second + 1;
352  for (size_t candIndex = candBegin; candIndex != candEnd; ++candIndex) {
353  CandPtr candRef(srcRef, candIndex);
354  bool noOverlap = true;
355  const reco::Candidate &cand = *candRef;
356  for (typename CandStack::const_iterator i = stack.begin(); i != stack.end(); ++i)
357  if (checkOverlap_ && overlap_(cand, *(i->first.first))) {
358  noOverlap = false;
359  break;
360  }
361  if (noOverlap) {
362  stack.push_back(std::make_pair(std::make_pair(candRef, candIndex), collBegin));
363  if (checkCharge_)
364  qStack.push_back(cand.charge());
365  combine(collectionIndex + 1, stack, qStack, collBegin + 1, collEnd, comps, names);
366  stack.pop_back();
367  qStack.pop_back();
368  }
369  }
370  }
371 }

◆ combine() [7/7]

template<typename OutputCollection, typename CandPtr>
void CandCombinerBase< OutputCollection, CandPtr >::combine ( typename OutputCollection::value_type &  cmp,
const CandPtr &  c1,
const CandPtr &  c2,
const std::string  name1 = "",
const std::string  name2 = "" 
) const
private

returns a composite candidate combined from two daughters

Definition at line 148 of file CandCombinerBase.h.

152  {
153  addDaughter(cmp, c1, name1);
154  addDaughter(cmp, c2, name2);
155  setup(cmp);
156 }

◆ preselect()

template<typename OutputCollection , typename CandPtr >
bool CandCombinerBase< OutputCollection, CandPtr >::preselect ( const reco::Candidate c1,
const reco::Candidate c2 
) const
private

verify that the two candidate don't overlap and check charge

Definition at line 134 of file CandCombinerBase.h.

135  {
136  if (checkCharge_) {
137  int dq1 = dauCharge_[0], dq2 = dauCharge_[1], q1 = c1.charge(), q2 = c2.charge();
138  bool matchCharge = (q1 == dq1 && q2 == dq2) || (q1 == -dq1 && q2 == -dq2);
139  if (!matchCharge)
140  return false;
141  }
142  if (checkOverlap_ && overlap_(c1, c2))
143  return false;
144  return selectPair(c1, c2);
145 }

◆ select()

template<typename OutputCollection, typename CandPtr>
virtual bool CandCombinerBase< OutputCollection, CandPtr >::select ( const reco::Candidate ) const
privatepure virtual

◆ selectPair()

template<typename OutputCollection, typename CandPtr>
virtual bool CandCombinerBase< OutputCollection, CandPtr >::selectPair ( const reco::Candidate c1,
const reco::Candidate c2 
) const
privatepure virtual

◆ setup()

template<typename OutputCollection, typename CandPtr>
virtual void CandCombinerBase< OutputCollection, CandPtr >::setup ( typename OutputCollection::value_type &  ) const
privatepure virtual

set kinematics to reconstructed composite

Implemented in CandCombiner< Selector, PairSelector, Cloner, OutputCollection, Setup >.

Referenced by o2olib.O2OTool::execute().

Member Data Documentation

◆ checkCharge_

template<typename OutputCollection, typename CandPtr>
bool CandCombinerBase< OutputCollection, CandPtr >::checkCharge_
private

flag to specify the checking of electric charge

Definition at line 84 of file CandCombinerBase.h.

◆ checkOverlap_

template<typename OutputCollection, typename CandPtr>
bool CandCombinerBase< OutputCollection, CandPtr >::checkOverlap_
private

flag to specify the checking of overlaps

Definition at line 86 of file CandCombinerBase.h.

◆ dauCharge_

template<typename OutputCollection, typename CandPtr>
std::vector<int> CandCombinerBase< OutputCollection, CandPtr >::dauCharge_
private

electric charges of the daughters

Definition at line 88 of file CandCombinerBase.h.

Referenced by CandCombinerBase< OutputCollection, Cloner::CandPtr >::CandCombinerBase().

◆ name_

template<typename OutputCollection, typename CandPtr>
std::string CandCombinerBase< OutputCollection, CandPtr >::name_
private

composite name (if applies)

Definition at line 92 of file CandCombinerBase.h.

◆ overlap_

template<typename OutputCollection, typename CandPtr>
OverlapChecker CandCombinerBase< OutputCollection, CandPtr >::overlap_
private

utility to check candidate daughters overlap

Definition at line 90 of file CandCombinerBase.h.

PA_ZEESkim_cff.checkCharge
checkCharge
Definition: PA_ZEESkim_cff.py:27
testProducerWithPsetDescEmpty_cfi.i2
i2
Definition: testProducerWithPsetDescEmpty_cfi.py:46
mps_fire.i
i
Definition: mps_fire.py:355
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
CandCombinerBase::select
virtual bool select(const reco::Candidate &) const =0
select a candidate
testProducerWithPsetDescEmpty_cfi.i1
i1
Definition: testProducerWithPsetDescEmpty_cfi.py:45
data-class-funcs.q
q
Definition: data-class-funcs.py:169
cms::cuda::assert
assert(be >=bs)
CandCombinerBase::ChargeStack
std::vector< int > ChargeStack
Definition: CandCombinerBase.h:64
edm::Handle
Definition: AssociativeIterator.h:50
CandCombinerBase::checkOverlap_
bool checkOverlap_
flag to specify the checking of overlaps
Definition: CandCombinerBase.h:86
edm::Exception
Definition: EDMException.h:77
CandCombinerBase::checkCharge_
bool checkCharge_
flag to specify the checking of electric charge
Definition: CandCombinerBase.h:84
pfCandidateManager_cfi.matchCharge
matchCharge
Definition: pfCandidateManager_cfi.py:15
names
const std::string names[nVars_]
Definition: PhotonIDValueMapProducer.cc:122
reco::Candidate::charge
virtual int charge() const =0
electric charge
q2
double q2[4]
Definition: TauolaWrapper.h:88
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::View::size
size_type size() const
svgfig.stack
stack
Definition: svgfig.py:559
edm::View
Definition: CaloClusterFwd.h:14
q1
double q1[4]
Definition: TauolaWrapper.h:87
TrackRefitter_38T_cff.src
src
Definition: TrackRefitter_38T_cff.py:24
cand
Definition: decayParser.h:34
g4TestGeometry_cfi.checkOverlap
def checkOverlap(process)
Definition: g4TestGeometry_cfi.py:3
alignmentValidation.c1
c1
do drawing
Definition: alignmentValidation.py:1025
CandCombinerBase::setup
virtual void setup(typename OutputCollection::value_type &) const =0
set kinematics to reconstructed composite
reco::JetExtendedAssociation::value_type
Container::value_type value_type
Definition: JetExtendedAssociation.h:30
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
CandCombinerBase::overlap_
OverlapChecker overlap_
utility to check candidate daughters overlap
Definition: CandCombinerBase.h:90
cms::cuda::for
for(int i=first, nt=offsets[nh];i< nt;i+=gridDim.x *blockDim.x)
Definition: HistoContainer.h:27
reco::Candidate
Definition: Candidate.h:27
CandCombinerBase::dauCharge_
std::vector< int > dauCharge_
electric charges of the daughters
Definition: CandCombinerBase.h:88
CandCombinerBase::name_
std::string name_
composite name (if applies)
Definition: CandCombinerBase.h:92
fileCollector.cmp
cmp
Definition: fileCollector.py:125
Exception
Definition: hltDiff.cc:246
CandCombinerBase::CandStack
std::vector< std::pair< std::pair< CandPtr, size_t >, std::vector< edm::Handle< reco::CandidateView > >::const_iterator > > CandStack
temporary candidate stack
Definition: CandCombinerBase.h:63
HLT_2018_cff.cands
cands
Definition: HLT_2018_cff.py:13762
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
CandCombinerBase::combine
std::unique_ptr< OutputCollection > combine(const std::vector< edm::Handle< reco::CandidateView > > &, const vstring &=vstring()) const
return all selected candidate pairs
Definition: CandCombinerBase.h:159
hfnoseParametersInitialization_cfi.name2
name2
Definition: hfnoseParametersInitialization_cfi.py:8
HLTTauReferences_cfi.OutputCollection
OutputCollection
Definition: HLTTauReferences_cfi.py:92
CandCombinerBase::preselect
bool preselect(const reco::Candidate &, const reco::Candidate &) const
verify that the two candidate don't overlap and check charge
Definition: CandCombinerBase.h:134
CandCombinerBase::selectPair
virtual bool selectPair(const reco::Candidate &c1, const reco::Candidate &c2) const =0
select a candidate pair
edm::HandleBase::id
ProductID id() const
Definition: HandleBase.cc:13
edm::errors::Configuration
Definition: EDMException.h:36
CandCombinerBase::addDaughter
virtual void addDaughter(typename OutputCollection::value_type &cmp, const CandPtr &c, const std::string="") const =0
add candidate daughter