1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#ifndef DataFormats_TauReco_PFRecoTauChargedHadron_h
#define DataFormats_TauReco_PFRecoTauChargedHadron_h
#include "DataFormats/Candidate/interface/CompositePtrCandidate.h"
#include "DataFormats/Candidate/interface/CandidateFwd.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/Common/interface/Ptr.h"
#include "DataFormats/Math/interface/Point3D.h"
namespace reco {
namespace tau {
template <class TrackClass>
class PFRecoTauChargedHadronFromGenericTrackPlugin;
class PFRecoTauChargedHadronFromPFCandidatePlugin;
class RecoTauConstructor;
class PFRecoTauEnergyAlgorithmPlugin;
} // namespace tau
} // namespace reco
class PFRecoTauChargedHadronProducer;
namespace reco {
class PFRecoTauChargedHadron : public CompositePtrCandidate {
public:
typedef edm::Ptr<Track> TrackPtr;
enum PFRecoTauChargedHadronAlgorithm {
// Algorithm where each photon becomes a pi zero
kUndefined = 0,
kChargedPFCandidate = 1,
kTrack = 2,
kPFNeutralHadron = 3
};
PFRecoTauChargedHadron();
PFRecoTauChargedHadron(PFRecoTauChargedHadronAlgorithm algo, Charge q);
/// constructor from a Candidate
PFRecoTauChargedHadron(const Candidate& c, PFRecoTauChargedHadronAlgorithm algo = kUndefined);
/// constructor from values
PFRecoTauChargedHadron(Charge q,
const LorentzVector& p4,
const Point& vtx = Point(0, 0, 0),
int status = 0,
bool integerCharge = true,
PFRecoTauChargedHadronAlgorithm algo = kUndefined);
/// destructor
~PFRecoTauChargedHadron() override;
/// reference to "charged" PFCandidate (either charged PFCandidate or PFNeutralHadron)
const CandidatePtr& getChargedPFCandidate() const;
/// reference to reco::Track
const TrackPtr& getTrack() const;
/// reference to "lostTrack Candidate" when chadron built with tracks stored as pat::PackedCandidates
const CandidatePtr& getLostTrackCandidate() const;
/// references to additional neutral PFCandidates
const std::vector<CandidatePtr>& getNeutralPFCandidates() const;
/// position at ECAL entrance
const math::XYZPointF& positionAtECALEntrance() const;
/// Algorithm that built this charged hadron
PFRecoTauChargedHadronAlgorithm algo() const;
/// Check whether a given algo produced this charged hadron
bool algoIs(PFRecoTauChargedHadronAlgorithm algo) const;
void print(std::ostream& stream = std::cout) const;
private:
friend class tau::PFRecoTauChargedHadronFromPFCandidatePlugin;
template <class TrackClass>
friend class tau::PFRecoTauChargedHadronFromGenericTrackPlugin;
friend class tau::RecoTauConstructor;
friend class tau::PFRecoTauEnergyAlgorithmPlugin;
friend class ::PFRecoTauChargedHadronProducer;
PFRecoTauChargedHadronAlgorithm algo_;
CandidatePtr chargedPFCandidate_;
CandidatePtr lostTrackCandidate_;
TrackPtr track_;
std::vector<CandidatePtr> neutralPFCandidates_;
math::XYZPointF positionAtECALEntrance_;
};
std::ostream& operator<<(std::ostream& stream, const PFRecoTauChargedHadron& c);
} // end namespace reco
#endif
|