1 |
vuko |
1.1 |
#include "Vuko/WZAnalysis/interface/MuonProperties.h"
|
2 |
|
|
|
3 |
|
|
// user include files
|
4 |
|
|
#include "FWCore/Framework/interface/Event.h"
|
5 |
|
|
#include "FWCore/Framework/interface/ESHandle.h"
|
6 |
|
|
|
7 |
|
|
#include "DataFormats/Candidate/interface/CandidateFwd.h"
|
8 |
|
|
|
9 |
|
|
//--- muon AOD:
|
10 |
|
|
#include "DataFormats/JetReco/interface/CaloJetCollection.h"
|
11 |
|
|
#include "DataFormats/EgammaCandidates/interface/Electron.h"
|
12 |
|
|
#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
|
13 |
|
|
#include "DataFormats/EgammaReco/interface/BasicCluster.h"
|
14 |
|
|
#include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
|
15 |
|
|
#include "DataFormats/EgammaCandidates/interface/PixelMatchGsfElectron.h"
|
16 |
|
|
|
17 |
|
|
#include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h"
|
18 |
|
|
#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
|
19 |
|
|
#include "DataFormats/EcalDetId/interface/EBDetId.h"
|
20 |
|
|
#include "DataFormats/EcalDetId/interface/EEDetId.h"
|
21 |
|
|
#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
|
22 |
|
|
#include "Geometry/Records/interface/IdealGeometryRecord.h"
|
23 |
|
|
|
24 |
|
|
#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
|
25 |
|
|
|
26 |
senka |
1.3 |
// muon data formats
|
27 |
|
|
#include "DataFormats/MuonReco/interface/MuIsoDeposit.h"
|
28 |
|
|
#include "DataFormats/MuonReco/interface/MuonFwd.h"
|
29 |
|
|
#include "DataFormats/MuonReco/interface/Muon.h"
|
30 |
|
|
|
31 |
senka |
1.5 |
#include "Vuko/WZAnalysis/interface/WZAnalyzer.h"
|
32 |
vuko |
1.1 |
|
33 |
|
|
#include "TTree.h"
|
34 |
|
|
#include "TVector3.h"
|
35 |
|
|
#include <iostream>
|
36 |
|
|
#include <sstream>
|
37 |
|
|
|
38 |
|
|
using namespace wzana;
|
39 |
|
|
using namespace edm;
|
40 |
|
|
using namespace std;
|
41 |
|
|
|
42 |
|
|
|
43 |
|
|
MuonProperties::MuonProperties() { }
|
44 |
|
|
|
45 |
|
|
|
46 |
|
|
void MuonProperties::ResetValues() {
|
47 |
|
|
|
48 |
|
|
Charge = -10;
|
49 |
|
|
Pt = -10;
|
50 |
|
|
Energy = -10;
|
51 |
|
|
Eta = -10;
|
52 |
|
|
Phi = -10;
|
53 |
|
|
|
54 |
|
|
GenCharge = -10;
|
55 |
|
|
GenPt = -10;
|
56 |
|
|
GenEnergy = -10;
|
57 |
|
|
GenEta = -10;
|
58 |
|
|
GenPhi = -10;
|
59 |
|
|
MatchDRGen = -10;
|
60 |
|
|
|
61 |
|
|
MatchedGen = false;
|
62 |
|
|
MatchedGenFromB = false;
|
63 |
|
|
MatchedGenFromWZ = false;
|
64 |
|
|
|
65 |
senka |
1.3 |
//Data
|
66 |
|
|
//muon isolation info:
|
67 |
|
|
Et_ecal_tree=-2.;
|
68 |
|
|
Et_ecal_dr2_tree=-2.;
|
69 |
|
|
Et_ecal_dr3_tree=-2.;
|
70 |
|
|
Et_ecal_dr4_tree=-2.;
|
71 |
|
|
Et_ecal_dr7_tree=-2.;
|
72 |
|
|
|
73 |
|
|
Et_hcal_tree=-2.;
|
74 |
|
|
Et_hcal_dr2_tree=-2.;
|
75 |
|
|
Et_hcal_dr3_tree=-2.;
|
76 |
|
|
Et_hcal_dr4_tree=-2.;
|
77 |
|
|
Et_hcal_dr7_tree=-2.;
|
78 |
|
|
|
79 |
|
|
Et_ho_tree=-2.;
|
80 |
|
|
Et_ho_dr2_tree=-2.;
|
81 |
|
|
Et_ho_dr3_tree=-2.;
|
82 |
|
|
Et_ho_dr4_tree=-2.;
|
83 |
|
|
Et_ho_dr7_tree=-2.;
|
84 |
|
|
|
85 |
|
|
Pt_tr_tree=-2.;
|
86 |
|
|
Pt_tr_dr2_tree=-2.;
|
87 |
|
|
Pt_tr_dr3_tree=-2.;
|
88 |
|
|
Pt_tr_dr4_tree=-2.;
|
89 |
|
|
Pt_tr_dr7_tree=-2.;
|
90 |
|
|
|
91 |
|
|
N_tr_dr2_tree=-2;
|
92 |
|
|
N_tr_dr3_tree=-2;
|
93 |
|
|
N_tr_dr4_tree=-2;
|
94 |
|
|
N_tr_dr7_tree=-2;
|
95 |
|
|
|
96 |
|
|
d0_tree=-200.;
|
97 |
|
|
d0_error_tree=-200.;
|
98 |
|
|
dz_tree=-200.;
|
99 |
|
|
dz_error_tree=-200.;
|
100 |
|
|
|
101 |
vuko |
1.1 |
}
|
102 |
|
|
|
103 |
|
|
|
104 |
|
|
void MuonProperties::CreateFlavourSpecificBranches(TTree * tree,std::string prefix, std::string suffix)
|
105 |
|
|
{
|
106 |
|
|
|
107 |
|
|
// Create your branches
|
108 |
|
|
|
109 |
|
|
// Examples:
|
110 |
|
|
/*
|
111 |
|
|
createFloatBranch(tree,"dca", prefix,suffix, &EoP);
|
112 |
|
|
createIntBranch(tree,"nhits", prefix,suffix, &nhits);
|
113 |
|
|
createBoolBranch(tree,"matched", prefix,suffix, &matched);
|
114 |
|
|
*/
|
115 |
senka |
1.3 |
createFloatBranch(tree,"Et_ecal_tree", prefix,suffix, &Et_ecal_tree);
|
116 |
|
|
createFloatBranch(tree,"Et_ecal_dr2_tree", prefix,suffix, &Et_ecal_dr2_tree);
|
117 |
|
|
createFloatBranch(tree,"Et_ecal_dr3_tree", prefix,suffix, &Et_ecal_dr3_tree);
|
118 |
|
|
createFloatBranch(tree,"Et_ecal_dr4_tree", prefix,suffix, &Et_ecal_dr4_tree);
|
119 |
|
|
createFloatBranch(tree,"Et_ecal_dr7_tree", prefix,suffix, &Et_ecal_dr7_tree);
|
120 |
|
|
|
121 |
|
|
createFloatBranch(tree,"Et_hcal_tree", prefix,suffix, &Et_hcal_tree);
|
122 |
|
|
createFloatBranch(tree,"Et_hcal_dr2_tree", prefix,suffix, &Et_hcal_dr2_tree);
|
123 |
|
|
createFloatBranch(tree,"Et_hcal_dr3_tree", prefix,suffix, &Et_hcal_dr3_tree);
|
124 |
|
|
createFloatBranch(tree,"Et_hcal_dr4_tree", prefix,suffix, &Et_hcal_dr4_tree);
|
125 |
|
|
createFloatBranch(tree,"Et_hcal_dr7_tree", prefix,suffix, &Et_hcal_dr7_tree);
|
126 |
|
|
|
127 |
|
|
createFloatBranch(tree,"Et_ho_tree", prefix,suffix, &Et_ho_tree);
|
128 |
|
|
createFloatBranch(tree,"Et_ho_dr2_tree", prefix,suffix, &Et_ho_dr2_tree);
|
129 |
|
|
createFloatBranch(tree,"Et_ho_dr3_tree", prefix,suffix, &Et_ho_dr3_tree);
|
130 |
|
|
createFloatBranch(tree,"Et_ho_dr4_tree", prefix,suffix, &Et_ho_dr4_tree);
|
131 |
|
|
createFloatBranch(tree,"Et_ho_dr7_tree", prefix,suffix, &Et_ho_dr7_tree);
|
132 |
|
|
|
133 |
|
|
createFloatBranch(tree,"Pt_tr_tree", prefix,suffix, &Pt_tr_tree);
|
134 |
|
|
createFloatBranch(tree,"Pt_tr_dr2_tree", prefix,suffix, &Pt_tr_dr2_tree);
|
135 |
|
|
createFloatBranch(tree,"Pt_tr_dr3_tree", prefix,suffix, &Pt_tr_dr3_tree);
|
136 |
|
|
createFloatBranch(tree,"Pt_tr_dr4_tree", prefix,suffix, &Pt_tr_dr4_tree);
|
137 |
|
|
createFloatBranch(tree,"Pt_tr_dr7_tree", prefix,suffix, &Pt_tr_dr7_tree);
|
138 |
|
|
|
139 |
|
|
createIntBranch(tree,"N_tr_dr2_tree", prefix,suffix, &N_tr_dr2_tree);
|
140 |
|
|
createIntBranch(tree,"N_tr_dr3_tree", prefix,suffix, &N_tr_dr3_tree);
|
141 |
|
|
createIntBranch(tree,"N_tr_dr4_tree", prefix,suffix, &N_tr_dr4_tree);
|
142 |
|
|
createIntBranch(tree,"N_tr_dr7_tree", prefix,suffix, &N_tr_dr7_tree);
|
143 |
|
|
|
144 |
|
|
createFloatBranch(tree,"d0_tree", prefix,suffix, &d0_tree);
|
145 |
|
|
createFloatBranch(tree,"d0_error_tree", prefix,suffix, &d0_error_tree);
|
146 |
|
|
createFloatBranch(tree,"dz_tree", prefix,suffix, &dz_tree);
|
147 |
|
|
createFloatBranch(tree,"dz_error_tree", prefix,suffix, &dz_error_tree);
|
148 |
|
|
|
149 |
vuko |
1.1 |
}
|
150 |
|
|
|
151 |
|
|
void MuonProperties::FillProperties(const reco::Candidate * lepton,
|
152 |
vuko |
1.2 |
const edm::Event& iEvent,
|
153 |
vuko |
1.4 |
const edm::EventSetup& iSetup,
|
154 |
senka |
1.6 |
const reco::Candidate * genParticle, float dr)
|
155 |
vuko |
1.1 |
|
156 |
|
|
{
|
157 |
|
|
|
158 |
|
|
using namespace reco;
|
159 |
|
|
|
160 |
senka |
1.3 |
// ovdje ide racunanje deklariranih varijabli
|
161 |
|
|
// const PixelMatchGsfElectron * electron = dynamic_cast<const reco::PixelMatchGsfElectron *>(lepton);
|
162 |
vuko |
1.1 |
|
163 |
vuko |
1.7 |
const reco::Muon * muon = 0;
|
164 |
|
|
|
165 |
|
|
if ( lepton->hasMasterClone() ) {
|
166 |
|
|
CandidateBaseRef master = lepton->masterClone();
|
167 |
|
|
muon = dynamic_cast<const reco::Muon *>(&(*master));
|
168 |
|
|
} else {
|
169 |
|
|
muon = dynamic_cast<const reco::Muon *>(lepton);
|
170 |
|
|
}
|
171 |
|
|
|
172 |
|
|
|
173 |
|
|
// const reco::Muon * muon = dynamic_cast<const reco::Muon *>(lepton);
|
174 |
vuko |
1.1 |
|
175 |
senka |
1.3 |
if (muon == 0) {
|
176 |
vuko |
1.1 |
|
177 |
senka |
1.5 |
cout << "ElectronProperties::FillProperties: ,THIS IS NOT AN MUON!!! \n";
|
178 |
senka |
1.3 |
return;
|
179 |
|
|
}
|
180 |
|
|
|
181 |
vuko |
1.7 |
|
182 |
|
|
// Fills MC truth information
|
183 |
senka |
1.5 |
if (genParticle) {
|
184 |
vuko |
1.7 |
FillMCTruthInfo(lepton, genParticle);
|
185 |
senka |
1.5 |
}
|
186 |
|
|
|
187 |
senka |
1.3 |
Charge = muon->charge();
|
188 |
|
|
Pt = muon->pt();
|
189 |
|
|
Energy = muon->energy();
|
190 |
|
|
Eta = muon->eta();
|
191 |
|
|
Phi = muon->phi();
|
192 |
|
|
|
193 |
|
|
|
194 |
|
|
///////////////////////////////////////////////////////////
|
195 |
|
|
//
|
196 |
|
|
// ISOLATION VARIABLES
|
197 |
|
|
//
|
198 |
|
|
//
|
199 |
|
|
|
200 |
|
|
edm::Handle<reco::MuIsoDepositAssociationMap> ecalIso;
|
201 |
|
|
// iEvent.getByLabel(theECALIsoDepositLabel, ecalIso);
|
202 |
|
|
iEvent.getByLabel("muGlobalIsoDepositCalByAssociatorTowers","ecal", ecalIso);
|
203 |
|
|
// muGlobalIsoDepositCalByAssociatorTowers:ecal
|
204 |
|
|
|
205 |
|
|
edm::Handle<reco::MuIsoDepositAssociationMap> hcalIso;
|
206 |
|
|
// iEvent.getByLabel(theHCALIsoDepositLabel, hcalIso);
|
207 |
|
|
iEvent.getByLabel("muGlobalIsoDepositCalByAssociatorTowers","hcal", hcalIso);
|
208 |
|
|
// muGlobalIsoDepositCalByAssociatorTowers:hcal
|
209 |
|
|
|
210 |
|
|
edm::Handle<reco::MuIsoDepositAssociationMap> hocalIso;
|
211 |
|
|
// iEvent.getByLabel(theHOCALIsoDepositLabel, hocalIso);
|
212 |
|
|
iEvent.getByLabel("muGlobalIsoDepositCalByAssociatorTowers","ho", hocalIso);
|
213 |
|
|
// muGlobalIsoDepositCalByAssociatorTowers:ho
|
214 |
|
|
|
215 |
|
|
edm::Handle<reco::MuIsoDepositAssociationMap> trackerIso;
|
216 |
|
|
// iEvent.getByLabel(theTrackerIsoDepositLabel, trackerIso);
|
217 |
|
|
iEvent.getByLabel("muGlobalIsoDepositCtfTk", trackerIso);
|
218 |
|
|
// muGlobalIsoDepositCtfTk
|
219 |
|
|
|
220 |
|
|
const reco::MuIsoDeposit& depEcal = (*ecalIso)[muon->combinedMuon()];
|
221 |
|
|
const reco::MuIsoDeposit& depHcal = (*hcalIso)[muon->combinedMuon()];
|
222 |
|
|
const reco::MuIsoDeposit& depHOcal = (*hocalIso)[muon->combinedMuon()];
|
223 |
|
|
const reco::MuIsoDeposit& depTracker = (*trackerIso)[muon->combinedMuon()];
|
224 |
|
|
|
225 |
|
|
Et_ecal_tree=depEcal.muonEnergy();
|
226 |
|
|
Et_ecal_dr2_tree=depEcal.depositWithin(0.2);
|
227 |
|
|
Et_ecal_dr3_tree=depEcal.depositWithin(0.3);
|
228 |
|
|
Et_ecal_dr4_tree=depEcal.depositWithin(0.4);
|
229 |
|
|
Et_ecal_dr7_tree=depEcal.depositWithin(0.7);
|
230 |
|
|
|
231 |
|
|
Et_hcal_tree=depHcal.muonEnergy();
|
232 |
|
|
Et_hcal_dr2_tree=depHcal.depositWithin(0.2);
|
233 |
|
|
Et_hcal_dr3_tree=depHcal.depositWithin(0.3);
|
234 |
|
|
Et_hcal_dr4_tree=depHcal.depositWithin(0.4);
|
235 |
|
|
Et_hcal_dr7_tree=depHcal.depositWithin(0.7);
|
236 |
|
|
|
237 |
|
|
Et_ho_tree=depHOcal.muonEnergy();
|
238 |
|
|
Et_ho_dr2_tree=depHOcal.depositWithin(0.2);
|
239 |
|
|
Et_ho_dr3_tree=depHOcal.depositWithin(0.3);
|
240 |
|
|
Et_ho_dr4_tree=depHOcal.depositWithin(0.4);
|
241 |
|
|
Et_ho_dr7_tree=depHOcal.depositWithin(0.7);
|
242 |
|
|
|
243 |
|
|
Pt_tr_tree=depTracker.muonEnergy();
|
244 |
|
|
Pt_tr_dr2_tree=depTracker.depositAndCountWithin(0.2).first;
|
245 |
|
|
Pt_tr_dr3_tree=depTracker.depositAndCountWithin(0.3).first;
|
246 |
|
|
Pt_tr_dr4_tree=depTracker.depositAndCountWithin(0.4).first;
|
247 |
|
|
Pt_tr_dr7_tree=depTracker.depositAndCountWithin(0.7).first;
|
248 |
|
|
|
249 |
|
|
N_tr_dr2_tree=depTracker.depositAndCountWithin(0.2).second;
|
250 |
|
|
N_tr_dr3_tree=depTracker.depositAndCountWithin(0.3).second;
|
251 |
|
|
N_tr_dr4_tree=depTracker.depositAndCountWithin(0.4).second;
|
252 |
|
|
N_tr_dr7_tree=depTracker.depositAndCountWithin(0.7).second;
|
253 |
|
|
|
254 |
|
|
d0_tree=muon->combinedMuon()->d0();
|
255 |
|
|
d0_error_tree=muon->combinedMuon()->d0Error();
|
256 |
|
|
dz_tree=muon->combinedMuon()->dz();
|
257 |
|
|
dz_error_tree=muon->combinedMuon()->dzError();
|
258 |
|
|
|
259 |
vuko |
1.1 |
|
260 |
|
|
}
|