CMS 3D CMS Logo

ZMuMuTrackUserData.cc
Go to the documentation of this file.
8 
14 
18 
19 #include <vector>
20 
21 using namespace edm;
22 using namespace std;
23 using namespace reco;
24 using namespace isodeposit;
25 //using namespace pat;
26 
28 public:
30 
31 private:
32  void produce(edm::Event &, const edm::EventSetup &) override;
33 
37  double ptThreshold_, etEcalThreshold_, etHcalThreshold_, dRVetoTrk_, dRTrk_, dREcal_, dRHcal_;
38  double alpha_, beta_;
39  template <typename T>
40  vector<double> isolation(const T &t,
41  double ptThreshold,
42  double etEcalThreshold,
43  double etHcalThreshold,
44  double dRVetoTrk,
45  double dRTrk,
46  double dREcal,
47  double dRHcal,
48  double alpha,
49  double beta);
50 };
51 
52 template <typename T>
53 vector<double> ZMuMuTrackUserData::isolation(const T &t,
54  double ptThreshold,
55  double etEcalThreshold,
56  double etHcalThreshold,
57  double dRVetoTrk,
58  double dRTrk,
59  double dREcal,
60  double dRHcal,
61  double alpha,
62  double beta) {
63  vector<double> iso;
64  const pat::IsoDeposit *trkIso = t.isoDeposit(pat::TrackIso);
65  const pat::IsoDeposit *ecalIso = t.isoDeposit(pat::EcalIso);
66  const pat::IsoDeposit *hcalIso = t.isoDeposit(pat::HcalIso);
67 
68  Direction dir = Direction(t.eta(), t.phi());
69 
71  vetosTrk.push_back(new ConeVeto(dir, dRVetoTrk));
72  vetosTrk.push_back(new ThresholdVeto(ptThreshold));
73 
74  pat::IsoDeposit::AbsVetos vetosEcal;
75  vetosEcal.push_back(new ConeVeto(dir, 0.));
76  vetosEcal.push_back(new ThresholdVeto(etEcalThreshold));
77 
78  pat::IsoDeposit::AbsVetos vetosHcal;
79  vetosHcal.push_back(new ConeVeto(dir, 0.));
80  vetosHcal.push_back(new ThresholdVeto(etHcalThreshold));
81 
82  double isovalueTrk = (trkIso->sumWithin(dRTrk, vetosTrk));
83  double isovalueEcal = (ecalIso->sumWithin(dREcal, vetosEcal));
84  double isovalueHcal = (hcalIso->sumWithin(dRHcal, vetosHcal));
85 
86  iso.push_back(isovalueTrk);
87  iso.push_back(isovalueEcal);
88  iso.push_back(isovalueHcal);
89 
90  //double iso = isovalueTrk + isovalueEcal + isovalueHcal;
91  double combIso =
92  alpha * (((1 + beta) / 2 * isovalueEcal) + ((1 - beta) / 2 * isovalueHcal)) + ((1 - alpha) * isovalueTrk);
93 
94  iso.push_back(combIso);
95  double relIso = combIso /= t.pt();
96  iso.push_back(relIso);
97  return iso;
98 }
99 
101  : srcToken_(consumes<vector<pat::GenericParticle> >(cfg.getParameter<InputTag>("src"))),
102  beamSpotToken_(consumes<BeamSpot>(cfg.getParameter<InputTag>("beamSpot"))),
103  primaryVerticesToken_(consumes<VertexCollection>(cfg.getParameter<InputTag>("primaryVertices"))),
104  ptThreshold_(cfg.getParameter<double>("ptThreshold")),
105  etEcalThreshold_(cfg.getParameter<double>("etEcalThreshold")),
106  etHcalThreshold_(cfg.getParameter<double>("etHcalThreshold")),
107  dRVetoTrk_(cfg.getParameter<double>("dRVetoTrk")),
108  dRTrk_(cfg.getParameter<double>("dRTrk")),
109  dREcal_(cfg.getParameter<double>("dREcal")),
110  dRHcal_(cfg.getParameter<double>("dRHcal")),
111  alpha_(cfg.getParameter<double>("alpha")),
112  beta_(cfg.getParameter<double>("beta")) {
113  produces<std::vector<pat::GenericParticle> >();
114 }
115 
118  evt.getByToken(srcToken_, tracks);
119 
120  Handle<BeamSpot> beamSpotHandle;
121  evt.getByToken(beamSpotToken_, beamSpotHandle);
122 
123  Handle<VertexCollection> primaryVertices; // Collection of primary Vertices
124  evt.getByToken(primaryVerticesToken_, primaryVertices);
125 
126  unique_ptr<vector<pat::GenericParticle> > tkColl(new vector<pat::GenericParticle>(*tracks));
127  for (unsigned int i = 0; i < tkColl->size(); ++i) {
128  pat::GenericParticle &tk = (*tkColl)[i];
129  vector<double> iso = isolation(
131  tk.setIsolation(pat::User1Iso, iso[0]);
132  // cout << "track User1Iso " << iso[0] << endl;
133  tk.setIsolation(pat::User2Iso, iso[1]);
134  //cout << "track User2Iso " << iso[1] << endl;
135  tk.setIsolation(pat::User3Iso, iso[2]);
136  //cout << "track User3Iso " << iso[2] << endl;
137  tk.setIsolation(pat::User4Iso, iso[3]);
138  //cout << "track User4Iso " << iso[3] << endl;
139  tk.setIsolation(pat::User5Iso, iso[4]);
140  //cout << "track User5Iso " << iso[4] << endl;
141 
142  float zDaudxyFromBS = -1;
143  float zDaudzFromBS = -1;
144  float zDaudxyFromPV = -1;
145  float zDaudzFromPV = -1;
146  float zDauNofMuChambers = -1;
147  float zDauNofMuMatches = -1;
148  float zDauChi2 = -1;
149  float zDauTrkChi2 = -1;
150  float zDauSaChi2 = -1;
151  float zDauNofMuonHits = -1;
152  float zDauNofStripHits = -1;
153  float zDauNofPixelHits = -1;
154  float zDauMuEnergyEm = -1;
155  float zDauMuEnergyHad = -1;
156 
157  TrackRef muTrkRef = tk.track();
158  if (muTrkRef.isNonnull()) {
159  zDaudxyFromBS = muTrkRef->dxy(beamSpotHandle->position());
160  zDaudzFromBS = muTrkRef->dz(beamSpotHandle->position());
161  zDaudxyFromPV = muTrkRef->dxy(primaryVertices->begin()->position());
162  zDaudzFromPV = muTrkRef->dz(primaryVertices->begin()->position());
163  zDauChi2 = muTrkRef->normalizedChi2();
164  zDauTrkChi2 = muTrkRef->normalizedChi2();
165  zDauNofStripHits = muTrkRef->hitPattern().numberOfValidStripHits();
166  zDauNofPixelHits = muTrkRef->hitPattern().numberOfValidPixelHits();
167  }
168  tk.addUserFloat("zDau_dxyFromBS", zDaudxyFromBS);
169  tk.addUserFloat("zDau_dzFromBS", zDaudzFromBS);
170  tk.addUserFloat("zDau_dxyFromPV", zDaudxyFromPV);
171  tk.addUserFloat("zDau_dzFromPV", zDaudzFromPV);
172  tk.addUserFloat("zDau_NofMuonHits", zDauNofMuonHits);
173  tk.addUserFloat("zDau_TrkNofStripHits", zDauNofStripHits);
174  tk.addUserFloat("zDau_TrkNofPixelHits", zDauNofPixelHits);
175  tk.addUserFloat("zDau_NofMuChambers", zDauNofMuChambers);
176  tk.addUserFloat("zDau_NofMuMatches", zDauNofMuMatches);
177  tk.addUserFloat("zDau_Chi2", zDauChi2);
178  tk.addUserFloat("zDau_TrkChi2", zDauTrkChi2);
179  tk.addUserFloat("zDau_SaChi2", zDauSaChi2);
180  tk.addUserFloat("zDau_MuEnergyEm", zDauMuEnergyEm);
181  tk.addUserFloat("zDau_MuEnergyHad", zDauMuEnergyHad);
182  }
183 
184  evt.put(std::move(tkColl));
185 }
186 
188 
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
void setIsolation(IsolationKeys key, float value)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
ZMuMuTrackUserData(const edm::ParameterSet &)
void produce(edm::Event &, const edm::EventSetup &) override
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
void addUserFloat(const std::string &label, float data, const bool overwrite=false)
Set user-defined float.
Definition: PATObject.h:897
double sumWithin(double coneSize, const AbsVetos &vetos=AbsVetos(), bool skipDepositVeto=false) const
Definition: IsoDeposit.cc:137
Definition: HeavyIon.h:7
Analysis-level Generic Particle class (e.g. for hadron or muon not fully reconstructed) ...
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
vector< double > isolation(const T &t, double ptThreshold, double etEcalThreshold, double etHcalThreshold, double dRVetoTrk, double dRTrk, double dREcal, double dRHcal, double alpha, double beta)
EDGetTokenT< vector< pat::GenericParticle > > srcToken_
reco::TrackRef track() const override
EDGetTokenT< VertexCollection > primaryVerticesToken_
fixed size matrix
HLT enums.
const Point & position() const
position
Definition: BeamSpot.h:59
alpha
zGenParticlesMatch = cms.InputTag(""),
EDGetTokenT< BeamSpot > beamSpotToken_
isodeposit::AbsVetos AbsVetos
Definition: IsoDeposit.h:53
long double T
def move(src, dest)
Definition: eostools.py:511