CMS 3D CMS Logo

LeafRefCandidateT.h
Go to the documentation of this file.
1 #ifndef Candidate_LeafRefCandidateT_h
2 #define Candidate_LeafRefCandidateT_h
3 
14 
15 namespace reco {
16 
18  public:
22  typedef int Charge;
31 
32  typedef unsigned int index;
33 
36  // constructor from T
37  template <class REF>
38  LeafRefCandidateT(const REF& c, float m)
39  : LeafCandidate(c->charge(), PolarLorentzVector(c->pt(), c->eta(), c->phi(), m), c->vertex()),
40  ref_(c.refCore(), c.key()) {}
42  ~LeafRefCandidateT() override {}
43 
44  protected:
45  // get the ref (better be the correct ref!)
46  template <typename REF>
47  REF getRef() const {
48  return REF(ref_.toRefCore(), ref_.index());
49  }
50 
51  public:
53  size_t numberOfDaughters() const final { return 0; }
55  const Candidate* daughter(size_type) const final { return nullptr; }
57  size_t numberOfMothers() const final { return 0; }
59  const Candidate* mother(size_type) const final { return nullptr; }
61  Candidate* daughter(size_type) final { return nullptr; }
63  Candidate* daughter(const std::string& s) final { return nullptr; }
65  const Candidate* daughter(const std::string& s) const final { return nullptr; }
68  size_t numberOfSourceCandidatePtrs() const final { return 0; }
72  static const CandidatePtr dummyPtr;
73  return dummyPtr;
74  }
75 
77  bool hasMasterClone() const final { return false; }
81  static const CandidateBaseRef dummyRef;
82  return dummyRef;
83  }
86  bool hasMasterClonePtr() const final { return false; }
90  static const CandidatePtr dummyPtr;
91  return dummyPtr;
92  }
93 
95  template <typename Ref>
96  Ref masterRef() const {
97  Ref dummyRef;
98  return dummyRef;
99  }
101 
102  template <typename C>
103  C get() const {
104  if (hasMasterClone())
105  return masterClone()->template get<C>();
106  else
107  return reco::get<C>(*this);
108  }
110  template <typename C, typename Tag>
111  C get() const {
112  if (hasMasterClone())
113  return masterClone()->template get<C, Tag>();
114  else
115  return reco::get<C, Tag>(*this);
116  }
118  template <typename C>
119  C get(size_type i) const {
120  if (hasMasterClone())
121  return masterClone()->template get<C>(i);
122  else
123  return reco::get<C>(*this, i);
124  }
126  template <typename C, typename Tag>
127  C get(size_type i) const {
128  if (hasMasterClone())
129  return masterClone()->template get<C, Tag>(i);
130  else
131  return reco::get<C, Tag>(*this, i);
132  }
134  template <typename C>
135  size_type numberOf() const {
136  if (hasMasterClone())
137  return masterClone()->template numberOf<C>();
138  else
139  return reco::numberOf<C>(*this);
140  }
142  template <typename C, typename Tag>
143  size_type numberOf() const {
144  if (hasMasterClone())
145  return masterClone()->template numberOf<C, Tag>();
146  else
147  return reco::numberOf<C, Tag>(*this);
148  }
149 
150  bool isElectron() const final { return false; }
151  bool isMuon() const final { return false; }
152  bool isStandAloneMuon() const final { return false; }
153  bool isGlobalMuon() const final { return false; }
154  bool isTrackerMuon() const final { return false; }
155  bool isCaloMuon() const final { return false; }
156  bool isPhoton() const final { return false; }
157  bool isConvertedPhoton() const final { return false; }
158  bool isJet() const final { return false; }
159 
161 
162  protected:
164  bool overlap(const Candidate&) const override;
165  virtual bool overlap(const LeafRefCandidateT&) const;
166  template <typename, typename, typename>
171 
172  protected:
173  edm::RefCoreWithIndex ref_;
174 
175  private:
179  /*
180  virtual void setCharge( Charge q ) final {}
181  virtual void setThreeCharge( Charge qx3 ) final {}
182  virtual void setP4( const LorentzVector & p4 ) final {}
183  virtual void setP4( const PolarLorentzVector & p4 ) final {}
184  virtual void setPz( double pz ) final {}
185  virtual void setVertex( const Point & vertex ) final {}
186  virtual void setPdgId( int pdgId ) final {}
187  virtual void setStatus( int status ) final {}
188  virtual void setLongLived() final {}
189  virtual void setMassConstraint() final {}
190 
191  virtual double vertexChi2() const final { return 0.; }
192  virtual double vertexNdof() const final { return 0.; }
193  virtual double vertexNormalizedChi2() const final { return 0.; }
194  virtual double vertexCovariance(int i, int j) const final { return 0.; }
195  virtual void fillVertexCovariance(CovarianceMatrix & v) const final {}
196  */
197  };
198 
199  inline bool LeafRefCandidateT::overlap(const Candidate& o) const {
200  return (p4() == o.p4()) && (vertex() == o.vertex()) && (charge() == o.charge());
201  }
202 
203  inline bool LeafRefCandidateT::overlap(const LeafRefCandidateT& o) const {
204  return (ref_.id() == o.ref_.id()) && (ref_.index() == o.ref_.index());
205  }
206 
207 } // namespace reco
208 
209 #endif
const CandidateBaseRef & masterClone() const final
size_t numberOfDaughters() const final
number of daughters
bool isTrackerMuon() const final
math::XYZVector Vector
point in the space
~LeafRefCandidateT() override
destructor
bool overlap(const Candidate &) const override
check overlap with another Candidate
double pt() const final
transverse momentum
size_t size_type
Definition: Candidate.h:29
bool hasMasterClone() const final
This only happens if the concrete Candidate type is ShallowCloneCandidate.
size_type numberOf() const
number of components
size_t numberOfSourceCandidatePtrs() const final
const Point & vertex() const override
vertex position (overwritten by PF...)
#define CMS_CLASS_VERSION(_version_)
const LorentzVector & p4() const final
four-momentum Lorentz vector
CandidatePtr sourceCandidatePtr(size_type i) const final
size_type numberOf() const
number of components
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
Candidate * daughter(const std::string &s) final
return daughter with a specified role name
bool isJet() const final
bool isMuon() const final
bool isElectron() const final
bool isGlobalMuon() const final
key
prepare the HTCondor submission files and eventually submit them
def template(fileName, svg, replaceme="REPLACEME")
Definition: svgfig.py:521
Candidate * daughter(size_type) final
return daughter at a given position (throws an exception)
bool isStandAloneMuon() const final
LeafRefCandidateT()
default constructor
int Charge
electric charge type
const Candidate * daughter(const std::string &s) const final
return daughter with a specified role name
LeafRefCandidateT(const REF &c, float m)
bool isConvertedPhoton() const final
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
CandidateCollection daughters
collection of daughter candidates
const Candidate * mother(size_type) const final
return mother at a given position (throws an exception)
ProductID id() const
const CandidatePtr & masterClonePtr() const final
Ref masterRef() const
cast master clone reference to a concrete type
const Candidate * daughter(size_type) const final
return daughter at a given position (throws an exception)
fixed size matrix
HLT enums.
math::XYZPoint Point
point in the space
math::XYZTLorentzVector LorentzVector
Lorentz vector.
bool isCaloMuon() const final
size_t numberOfMothers() const final
number of mothers
bool isPhoton() const final
RefCore const & toRefCore() const
double phi() const final
momentum azimuthal angle
edm::RefCoreWithIndex ref_
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
bool hasMasterClonePtr() const final
int charge() const final
electric charge
unsigned int index() const
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:38
double eta() const final
momentum pseudorapidity