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
98
99
100
101
102
103
104
105
106
107
108
|
#ifndef HSCParticle_H
#define HSCParticle_H
#include "DataFormats/Common/interface/AssociationVector.h"
#include "DataFormats/Common/interface/AssociationMap.h"
#include "DataFormats/MuonReco/interface/MuonFwd.h"
#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/DeDxData.h"
#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
#include <vector>
#include "DataFormats/PatCandidates/interface/Muon.h"
#include "DataFormats/PatCandidates/interface/PackedCandidate.h"
#include "DataFormats/PatCandidates/interface/IsolatedTrack.h"
#include "DataFormats/TrackReco/interface/DeDxHitInfo.h"
#include "DataFormats/MuonReco/interface/MuonTimeExtra.h"
#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPCaloInfo.h"
namespace susybsm {
/// define arbitration schemes
namespace HSCParticleType {
enum Type { globalMuon, trackerMuon, matchedStandAloneMuon, standAloneMuon, innerTrack, unknown };
}
class RPCHit4D {
public:
int id;
int bx;
GlobalPoint gp;
bool operator<(const RPCHit4D& other) const { return gp.mag() < other.gp.mag(); }
};
class RPCBetaMeasurement {
public:
bool isCandidate;
float beta;
RPCBetaMeasurement() {
isCandidate = false;
beta = -9999;
}
};
class HSCParticle {
public:
// constructor
HSCParticle() {}
// check available infos
bool hasTrack() const { return track_.packedCandRef().isNonnull(); }
bool hasMuon() const { return muon_.isNonnull(); }
bool hasMuonRef() const { return muonRef_.isNonnull(); }
bool hasMTMuonRef() const { return MTMuonRef_.isNonnull(); }
bool hasTrackRef() const { return trackRef_.isNonnull(); }
bool hasTrackIsoRef() const { return trackIsoRef_.isNonnull(); }
bool hasRpcInfo() const { return rpc_.beta != -9999; }
bool hasCaloInfo() const { return caloInfoRef_.isNonnull(); }
// set infos
void setDeDxHitInfo(const reco::DeDxHitInfo* data) { dedxHitInfo_ = data; }
void setTrack(const pat::IsolatedTrack& data) { track_ = data; }
void setMuon(const pat::MuonRef& data) { muon_ = data; }
void setMuon(const reco::MuonRef& data) { muonRef_ = data; }
void setMTMuon(const reco::MuonRef& data) { MTMuonRef_ = data; }
void setTrack(const reco::TrackRef& data) { trackRef_ = data; }
void setTrackIso(const reco::TrackRef& data) { trackIsoRef_ = data; }
void setRpc(const RPCBetaMeasurement& data) { rpc_ = data; }
void setCaloInfo(const HSCPCaloInfoRef& data) { caloInfoRef_ = data; }
// get infos
const reco::DeDxHitInfo* dedxHitInfo() const { return dedxHitInfo_; }
pat::IsolatedTrack track() const { return track_; }
pat::MuonRef muon() const { return muon_; }
reco::TrackRef trackRef() const { return trackRef_; }
reco::TrackRef trackIsoRef() const { return trackIsoRef_; }
reco::MuonRef muonRef() const { return muonRef_; }
reco::MuonRef MTMuonRef() const { return MTMuonRef_; }
HSCPCaloInfoRef caloInfoRef() const { return caloInfoRef_; }
const RPCBetaMeasurement& rpc() const { return rpc_; }
// shortcut of long function
float p() const;
float pt() const;
int type() const;
private:
const reco::DeDxHitInfo* dedxHitInfo_ = nullptr;
pat::IsolatedTrack track_;
pat::MuonRef muon_;
reco::TrackRef trackRef_; //TrackRef from refitted track collection (dE/dx purposes)
reco::TrackRef trackIsoRef_; //TrackRef from general track collection (isolation purposes)
reco::MuonRef muonRef_;
reco::MuonRef MTMuonRef_; //Muon reconstructed from MT muon segments. SA only
HSCPCaloInfoRef caloInfoRef_;
RPCBetaMeasurement rpc_;
};
typedef std::vector<HSCParticle> HSCParticleCollection;
typedef edm::Ref<HSCParticleCollection> HSCParticleRef;
typedef edm::RefProd<HSCParticleCollection> HSCParticleRefProd;
typedef edm::RefVector<HSCParticleCollection> HSCParticleRefVector;
typedef edm::AssociationMap<edm::OneToOne<reco::TrackCollection, EcalRecHitCollection> > TracksEcalRecHitsMap;
} // namespace susybsm
#endif
|