CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
muonSelections.cc
Go to the documentation of this file.
1 #include <iostream>
2 
3 #include "Math/VectorUtil.h"
4 
7 
8 using namespace std;
9 
10 namespace HWWFunctions {
11 
13  // Identification //
15 
16  bool muonId(HWW& hww, unsigned int index, SelectionType type){
17 
18  float isovalue;
19  bool truncated = true;
20 
21  switch(type) {
22 
24  // Higgs, WW //
26 
27  // WW
28  case NominalWWV0:
29  case NominalWWV1:
30  isovalue = 0.15;
31  break;
34  isovalue = 0.40;
35  break;
37  if (!muonIdNotIsolated(hww, index, type )) return false;
38  return muonIsoValuePF(hww, index,0,0.3) < 0.40;
39  break;
43  isovalue = 1.0;
44  break;
45 
46  // SMURF
48  if (!muonIdNotIsolated(hww, index, type )) return false;
49  return muonIsoValuePF(hww, index,0,0.3) < 1.0;
50  break;
51  case NominalSmurfV3:
52  if (!muonIdNotIsolated(hww, index, type )) return false;
53  if (hww.mus_p4().at(index).pt()<20)
54  return muonIsoValue(hww, index,false) < 0.1;
55  else
56  return muonIsoValue(hww, index,false) < 0.15;
57  break;
58  case NominalSmurfV4:
59  if (!muonIdNotIsolated(hww, index, type )) return false;
60  if (hww.mus_p4().at(index).pt()>20) {
61  if (TMath::Abs(hww.mus_p4().at(index).eta())<1.479) return muonIsoValuePF(hww, index,0) < 0.22;
62  else return muonIsoValuePF(hww, index,0) < 0.20;
63  } else {
64  return muonIsoValuePF(hww, index,0) < 0.11;
65  }
66  break;
67  case NominalSmurfV5:
68  case NominalSmurfV6:
69  if (!muonIdNotIsolated(hww, index, type )) return false;
70  if (hww.mus_p4().at(index).pt()>20) {
71  if (TMath::Abs(hww.mus_p4().at(index).eta())<1.479) return muonIsoValuePF(hww, index,0,0.3) < 0.13;
72  else return muonIsoValuePF(hww, index,0,0.3) < 0.09;
73  } else {
74  if (TMath::Abs(hww.mus_p4().at(index).eta())<1.479) return muonIsoValuePF(hww, index,0,0.3) < 0.06;
75  else return muonIsoValuePF(hww, index,0,0.3) < 0.05;
76  }
77  break;
78 
79 
80 
82  // Default //
84  default:
85  edm::LogError("InvalidInput") << "muonID ERROR: requested muon type is not defined. Abort.";
86  exit(1);
87  return false;
88  }
89  return
90  muonIdNotIsolated(hww, index, type ) && // Id
91  muonIsoValue(hww, index,truncated) < isovalue; // Isolation cut
92  }
93 
94 
96  // Identification //
98 
99  bool muonIdNotIsolated(HWW& hww, unsigned int index, SelectionType type) {
100 
101  if ( hww.mus_p4().at(index).pt() < 5.0) {
102  return false;
103  }
104 
105  switch (type) {
106 
107  case NominalWWV0:
108  if ( TMath::Abs(hww.mus_p4().at(index).eta()) > 2.4) return false; // eta cut
109  if (hww.mus_gfit_chi2().at(index)/hww.mus_gfit_ndof().at(index) >= 10) return false; //glb fit chisq
110  if (((hww.mus_type().at(index)) & (1<<1)) == 0) return false; // global muon
111  if (((hww.mus_type().at(index)) & (1<<2)) == 0) return false; // tracker muon
112  if (hww.mus_validHits().at(index) < 11) return false; // # of tracker hits
113  if (hww.mus_gfit_validSTAHits().at(index)==0 ) return false; // Glb fit must have hits in mu chambers
114  if (TMath::Abs(mud0PV(hww, index)) >= 0.02) return false; // d0 from pvtx
115  return true;
116  break;
117 
120  case NominalWWV1:
121  if ( TMath::Abs(hww.mus_p4().at(index).eta()) > 2.4) return false; // eta cut
122  if (hww.mus_gfit_chi2().at(index)/hww.mus_gfit_ndof().at(index) >= 10) return false; //glb fit chisq
123  if (((hww.mus_type().at(index)) & (1<<1)) == 0) return false; // global muon
124  if (((hww.mus_type().at(index)) & (1<<2)) == 0) return false; // tracker muon
125  if (hww.mus_validHits().at(index) < 11) return false; // # of tracker hits
126  if (hww.mus_gfit_validSTAHits().at(index)==0 ) return false; // Glb fit must have hits in mu chambers
127  if (TMath::Abs(mud0PV_wwV1(hww, index)) >= 0.02) return false; // d0 from pvtx
128  if (TMath::Abs(mudzPV_wwV1(hww, index)) >= 1.0) return false; // dz from pvtx
129  if (hww.mus_ptErr().at(index)/hww.mus_p4().at(index).pt()>0.1) return false;
130  if (hww.trks_valid_pixelhits().at(hww.mus_trkidx().at(index))==0) return false;
131  if (hww.mus_nmatches().at(index)<2) return false;
132  return true;
133  break;
134 
135  case muonSelectionFO_mu_wwV1_iso10_d0: // same as muonSelectionFO_mu_wwV1_iso10 but with looser d0 cut
136  if ( TMath::Abs(hww.mus_p4().at(index).eta()) > 2.4) return false; // eta cut
137  if (hww.mus_gfit_chi2().at(index)/hww.mus_gfit_ndof().at(index) >= 10) return false; //glb fit chisq
138  if (((hww.mus_type().at(index)) & (1<<1)) == 0) return false; // global muon
139  if (((hww.mus_type().at(index)) & (1<<2)) == 0) return false; // tracker muon
140  if (hww.mus_validHits().at(index) < 11) return false; // # of tracker hits
141  if (hww.mus_gfit_validSTAHits().at(index)==0 ) return false; // Glb fit must have hits in mu chambers
142  if (TMath::Abs(mud0PV_wwV1(hww, index)) >= 0.2) return false; // d0 from pvtx
143  if (TMath::Abs(mudzPV_wwV1(hww, index)) >= 1.0) return false; // dz from pvtx
144  if (hww.mus_ptErr().at(index)/hww.mus_p4().at(index).pt()>0.1) return false;
145  if (hww.trks_valid_pixelhits().at(hww.mus_trkidx().at(index))==0) return false;
146  if (hww.mus_nmatches().at(index)<2) return false;
147  return true;
148  break;
149 
151  if ( TMath::Abs(hww.mus_p4().at(index).eta()) > 2.4) return false; // eta cut
152  if (hww.mus_gfit_chi2().at(index)/hww.mus_gfit_ndof().at(index) >= 10) return false; //glb fit chisq
153  if (((hww.mus_type().at(index)) & (1<<1)) == 0) return false; // global muon
154  if (((hww.mus_type().at(index)) & (1<<2)) == 0) return false; // tracker muon
155  if (hww.mus_validHits().at(index) < 11) return false; // # of tracker hits
156  if (hww.mus_gfit_validSTAHits().at(index)==0 ) return false; // Glb fit must have hits in mu chambers
157  if (TMath::Abs(mud0PV(hww, index)) >= 0.02) return false; // d0 from pvtx
158  return true;
159 
161  if ( TMath::Abs(hww.mus_p4().at(index).eta()) > 2.4) return false; // eta cut
162  if (hww.mus_gfit_chi2().at(index)/hww.mus_gfit_ndof().at(index) >= 10) return false; //glb fit chisq
163  if (((hww.mus_type().at(index)) & (1<<1)) == 0) return false; // global muon
164  if (((hww.mus_type().at(index)) & (1<<2)) == 0) return false; // tracker muon
165  if (hww.mus_validHits().at(index) < 11) return false; // # of tracker hits
166  if (hww.mus_gfit_validSTAHits().at(index)==0 ) return false; // Glb fit must have hits in mu chambers
167  if (TMath::Abs(mud0PV(hww, index)) >= 0.02) return false; // d0 from pvtx
168  return true;
169 
170  case NominalSmurfV3:
171  case NominalSmurfV4:
172  case NominalSmurfV5:
173  if (type == NominalSmurfV3 || type == NominalSmurfV4 || type == NominalSmurfV5){
174  if (hww.mus_p4().at(index).pt()<20){
175  if (TMath::Abs(mud0PV_smurfV3(hww, index)) >= 0.01) return false; // d0 from pvtx
176  } else {
177  if (TMath::Abs(mud0PV_smurfV3(hww, index)) >= 0.02) return false; // d0 from pvtx
178  }
179  } else {
180  if (TMath::Abs(mud0PV_smurfV3(hww, index)) >= 0.2) return false; // d0 from pvtx
181  }
182  if ( TMath::Abs(hww.mus_p4().at(index).eta()) > 2.4) return false; // eta cut
183  if (hww.mus_gfit_chi2().at(index)/hww.mus_gfit_ndof().at(index) >= 10) return false; //glb fit chisq
184  if (((hww.mus_type().at(index)) & (1<<1)) == 0) return false; // global muon
185  if (((hww.mus_type().at(index)) & (1<<2)) == 0) return false; // tracker muon
186  if (hww.mus_validHits().at(index) < 11) return false; // # of tracker hits
187  if (hww.mus_gfit_validSTAHits().at(index)==0 ) return false; // Glb fit must have hits in mu chambers
188  if (TMath::Abs(mudzPV_smurfV3(hww, index)) >= 0.1) return false; // dz from pvtx
189  if (hww.mus_ptErr().at(index)/hww.mus_p4().at(index).pt()>0.1) return false;
190  if (hww.trks_valid_pixelhits().at(hww.mus_trkidx().at(index))==0) return false;
191  if (hww.mus_nmatches().at(index)<2) return false;
192  return true;
193  break;
194 
195 
198  case NominalSmurfV6:
199  {
200  if (type == NominalSmurfV6){
201  if (hww.mus_p4().at(index).pt()<20){
202  if (TMath::Abs(mud0PV_smurfV3(hww, index)) >= 0.01) return false; // d0 from pvtx
203  } else {
204  if (TMath::Abs(mud0PV_smurfV3(hww, index)) >= 0.02) return false; // d0 from pvtx
205  }
206  } else {
207  if (TMath::Abs(mud0PV_smurfV3(hww, index)) >= 0.2) return false; // d0 from pvtx
208  }
209  if ( TMath::Abs(hww.mus_p4().at(index).eta()) > 2.4) return false; // eta cut
210  if (hww.mus_validHits().at(index) < 11) return false; // # of tracker hits
211  if (TMath::Abs(mudzPV_smurfV3(hww, index)) >= 0.1) return false; // dz from pvtx
212  if (hww.mus_ptErr().at(index)/hww.mus_p4().at(index).pt()>0.1) return false;
213  if (hww.trks_valid_pixelhits().at(hww.mus_trkidx().at(index))==0) return false;
214  bool goodMuonGlobalMuon = false;
215  if (((hww.mus_type().at(index)) & (1<<1)) != 0) { // global muon
216  goodMuonGlobalMuon = true;
217  if (hww.mus_nmatches().at(index)<2) goodMuonGlobalMuon = false;
218  if (hww.mus_gfit_chi2().at(index)/hww.mus_gfit_ndof().at(index) >= 10) goodMuonGlobalMuon = false; //glb fit chisq
219  if (hww.mus_gfit_validSTAHits().at(index)==0 ) goodMuonGlobalMuon = false; // Glb fit must have hits in mu chambers
220  }
221  bool goodMuonTrackerMuon = false;
222  if (((hww.mus_type().at(index)) & (1<<2)) != 0) { // tracker muon
223  goodMuonTrackerMuon = true;
224  if (hww.mus_pid_TMLastStationTight().at(index) == 0 ) goodMuonTrackerMuon = false; // last station tight
225  }
226  return goodMuonGlobalMuon || goodMuonTrackerMuon;
227  break;
228  }
229  default:
230  edm::LogError("InvalidInput") << "muonID ERROR: requested muon type is not defined. Abort.";
231  return false;
232  }
233  }
234 
235 
237  // Isolation Calculations //
239 
240  double muonIsoValue(HWW& hww, unsigned int index, bool truncated ){
241  return ( muonIsoValue_TRK(hww, index, truncated ) + muonIsoValue_ECAL(hww, index, truncated ) + muonIsoValue_HCAL(hww, index, truncated ) );
242  }
243  double muonIsoValue_TRK(HWW& hww, unsigned int index, bool truncated ){
244  double pt = hww.mus_p4().at(index).pt();
245  if(truncated) pt = max( pt, 20.0 );
246  return hww.mus_iso03_sumPt().at(index) / pt;
247  }
248  double muonIsoValue_ECAL(HWW& hww, unsigned int index, bool truncated ){
249  double pt = hww.mus_p4().at(index).pt();
250  if(truncated) pt = max( pt, 20.0 );
251  return hww.mus_iso03_emEt().at(index) / pt;
252  }
253  double muonIsoValue_HCAL(HWW& hww, unsigned int index, bool truncated){
254  double pt = hww.mus_p4().at(index).pt();
255  if(truncated) pt = max( pt, 20.0 );
256  return hww.mus_iso03_hadEt().at(index) / pt;
257  }
258 
259  #ifdef PFISOFROMNTUPLE
260  double muonIsoValuePF(HWW& hww, unsigned int imu, unsigned int ivtx, float coner, float minptn, float dzcut, int filterId){
261  if (fabs(coner-0.3)<0.0001) {
262  if (hww.mus_iso03_pf().at(imu)<-99.) return 9999.;
263  return hww.mus_iso03_pf().at(imu)/hww.mus_p4().at(imu).pt();
264  } else if (fabs(coner-0.4)<0.0001) {
265  if (hww.mus_iso04_pf().at(imu)<-99.) return 9999.;
266  return hww.mus_iso04_pf().at(imu)/hww.mus_p4().at(imu).pt();
267  } else {
268  edm::LogWarning("InvalidInput") << "muonIsoValuePF: CONE SIZE NOT SUPPORTED";
269  return 9999.;
270  }
271  }
272  #else
273  double muonIsoValuePF(HWW& hww, unsigned int imu, unsigned int ivtx, float coner, float minptn, float dzcut, int filterId){
274  float pfciso = 0;
275  float pfniso = 0;
276  int mutkid = hww.mus_trkidx().at(imu);
277  float mudz = mutkid>=0 ? trks_dz_pv(hww, mutkid,ivtx).first : hww.mus_sta_z0corr().at(imu);
278  for (unsigned int ipf=0; ipf<hww.pfcands_p4().size(); ++ipf){
279  float dR = ROOT::Math::VectorUtil::DeltaR( hww.pfcands_p4().at(ipf), hww.mus_p4().at(imu) );
280  if (dR>coner) continue;
281  float pfpt = hww.pfcands_p4().at(ipf).pt();
282  int pfid = abs(hww.pfcands_particleId().at(ipf));
283  if (filterId!=0 && filterId!=pfid) continue;
284  if (hww.pfcands_charge().at(ipf)==0) {
285  //neutrals
286  if (pfpt>minptn) pfniso+=pfpt;
287  } else {
288  //charged
289  //avoid double counting of muon itself
290  int pftkid = hww.pfcands_trkidx().at(ipf);
291  if (mutkid>=0 && pftkid>=0 && mutkid==pftkid) continue;
292  //first check electrons with gsf track
293  if (abs(hww.pfcands_particleId().at(ipf))==11 && hww.pfcands_pfelsidx().at(ipf)>=0 && hww.pfels_elsidx().at(hww.pfcands_pfelsidx().at(ipf))>=0) {
294  int gsfid = hww.els_gsftrkidx().at(hww.pfels_elsidx().at(hww.pfcands_pfelsidx().at(ipf)));
295  if (gsfid>=0) {
296  if(fabs(gsftrks_dz_pv(hww, gsfid,ivtx ).first - mudz )<dzcut) {//dz cut
297  pfciso+=pfpt;
298  }
299  continue;//and avoid double counting
300  }
301  }
302  //then check anything that has a ctf track
303  if (hww.pfcands_trkidx().at(ipf)>=0) {//charged (with a ctf track)
304  if(fabs( trks_dz_pv(hww, hww.pfcands_trkidx().at(ipf),ivtx).first - mudz )<dzcut) {//dz cut
305  pfciso+=pfpt;
306  }
307  }
308  }
309  }
310  return (pfciso+pfniso)/hww.mus_p4().at(imu).pt();
311  }
312  #endif
313 
314 
316  // Muon d0 corrected by PV //
318 
319  double mud0PV(HWW& hww, unsigned int index){
320  if ( hww.vtxs_sumpt().empty() ) return 9999.;
321  unsigned int iMax = 0;
322  double sumPtMax = hww.vtxs_sumpt().at(0);
323  for ( unsigned int i = iMax+1; i < hww.vtxs_sumpt().size(); ++i )
324  if ( hww.vtxs_sumpt().at(i) > sumPtMax ){
325  iMax = i;
326  sumPtMax = hww.vtxs_sumpt().at(i);
327  }
328  double dxyPV = hww.mus_d0().at(index)-
329  hww.vtxs_position().at(iMax).x()*sin(hww.mus_trk_p4().at(index).phi())+
330  hww.vtxs_position().at(iMax).y()*cos(hww.mus_trk_p4().at(index).phi());
331  return dxyPV;
332  }
333 
334  double mud0PV_wwV1(HWW& hww, unsigned int index){
335  if ( hww.vtxs_sumpt().empty() ) return 9999.;
336  double sumPtMax = -1;
337  int iMax = -1;
338  for ( unsigned int i = 0; i < hww.vtxs_sumpt().size(); ++i ){
339  if (hww.vtxs_isFake().at(i)) continue;
340  if (hww.vtxs_ndof().at(i) < 4.) continue;
341  if (hww.vtxs_position().at(i).Rho() > 2.0) continue;
342  if (fabs(hww.vtxs_position().at(i).Z()) > 24.0) continue;
343  if ( hww.vtxs_sumpt().at(i) > sumPtMax ){
344  iMax = i;
345  sumPtMax = hww.vtxs_sumpt().at(i);
346  }
347  }
348  if (iMax<0) return 9999.;
349  double dxyPV = hww.mus_d0().at(index)-
350  hww.vtxs_position().at(iMax).x()*sin(hww.mus_trk_p4().at(index).phi())+
351  hww.vtxs_position().at(iMax).y()*cos(hww.mus_trk_p4().at(index).phi());
352  return dxyPV;
353  }
354 
355  double mud0PV_smurfV3(HWW& hww, unsigned int index){
356  int vtxIndex = 0;
357  double dxyPV = hww.mus_d0().at(index)-
358  hww.vtxs_position().at(vtxIndex).x()*sin(hww.mus_trk_p4().at(index).phi())+
359  hww.vtxs_position().at(vtxIndex).y()*cos(hww.mus_trk_p4().at(index).phi());
360  return dxyPV;
361  }
362 
363  double dzPV_mu(HWW& hww, const LorentzVector& vtx, const LorentzVector& p4, const LorentzVector& pv){
364  return (vtx.z()-pv.z()) - ((vtx.x()-pv.x())*p4.x()+(vtx.y()-pv.y())*p4.y())/p4.pt() * p4.z()/p4.pt();
365  }
366 
367  double mudzPV_smurfV3(HWW& hww, unsigned int index){
368  int vtxIndex = 0;
369  double dzpv = dzPV_mu(hww, hww.mus_vertex_p4().at(index), hww.mus_trk_p4().at(index), hww.vtxs_position().at(vtxIndex));
370  return dzpv;
371  }
372 
373  double mudzPV_wwV1(HWW& hww, unsigned int index){
374  if ( hww.vtxs_sumpt().empty() ) return 9999.;
375  double sumPtMax = -1;
376  int iMax = -1;
377  for ( unsigned int i = 0; i < hww.vtxs_sumpt().size(); ++i ){
378  if (hww.vtxs_isFake().at(i)) continue;
379  if (hww.vtxs_ndof().at(i) < 4.) continue;
380  if (hww.vtxs_position().at(i).Rho() > 2.0) continue;
381  if (fabs(hww.vtxs_position().at(i).Z()) > 24.0) continue;
382  if ( hww.vtxs_sumpt().at(i) > sumPtMax ){
383  iMax = i;
384  sumPtMax = hww.vtxs_sumpt().at(i);
385  }
386  }
387  if (iMax<0) return 9999.;
388  const LorentzVector& vtx = hww.mus_vertex_p4().at(index);
389  const LorentzVector& p4 = hww.mus_trk_p4().at(index);
390  const LorentzVector& pv = hww.vtxs_position().at(iMax);
391  return (vtx.z()-pv.z()) - ((vtx.x()-pv.x())*p4.x()+(vtx.y()-pv.y())*p4.y())/p4.pt() * p4.z()/p4.pt();
392  }
393 
394  bool isPFMuon(HWW& hww, int index , bool requireSamePt , float dpt_max ){
395 
396  int ipf = hww.mus_pfmusidx().at( index );
397 
398  //--------------------------
399  // require matched pfmuon
400  //--------------------------
401 
402  if( ipf >= int(hww.pfmus_p4().size()) || ipf < 0 ) return false;
403 
404  //----------------------------------------------------
405  // require PFMuon pt = reco muon pt (within dpt_max)
406  //----------------------------------------------------
407 
408  if( requireSamePt ){
409 
410  float pt_pf = hww.pfmus_p4().at(ipf).pt();
411  float pt = hww.mus_p4().at(index).pt();
412 
413  if( fabs( pt_pf - pt ) > dpt_max ) return false;
414 
415  }
416 
417  return true;
418 
419  }
420 
421 }
type
Definition: HCALResponse.h:21
int i
Definition: DBlmapReader.cc:9
std::vector< int > & pfels_elsidx()
Definition: HWW.cc:749
double mud0PV_smurfV3(HWW &, unsigned int index)
std::vector< int > & trks_valid_pixelhits()
Definition: HWW.cc:63
bool isPFMuon(HWW &, int index, bool requireSamePt=true, float dpt_max=1.0)
std::vector< float > & mus_gfit_chi2()
Definition: HWW.cc:383
std::vector< int > & pfcands_charge()
Definition: HWW.cc:745
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
bool muonId(HWW &, unsigned int index, SelectionType type)
std::vector< int > & mus_pid_TMLastStationTight()
Definition: HWW.cc:543
std::vector< int > & mus_trkidx()
Definition: HWW.cc:535
std::vector< float > & mus_ptErr()
Definition: HWW.cc:391
std::vector< LorentzVector > & mus_p4()
Definition: HWW.cc:367
std::vector< float > & mus_iso03_hadEt()
Definition: HWW.cc:467
std::vector< LorentzVector > & pfcands_p4()
Definition: HWW.cc:725
std::vector< int > & mus_nmatches()
Definition: HWW.cc:547
std::vector< float > & mus_iso03_sumPt()
Definition: HWW.cc:459
std::vector< int > & mus_pfmusidx()
Definition: HWW.cc:523
std::vector< int > & mus_gfit_validSTAHits()
Definition: HWW.cc:515
std::vector< int > & els_gsftrkidx()
Definition: HWW.cc:333
double mud0PV_wwV1(HWW &, unsigned int index)
std::vector< int > & pfcands_trkidx()
Definition: HWW.cc:729
std::vector< int > & pfcands_pfelsidx()
Definition: HWW.cc:737
std::pair< double, double > gsftrks_dz_pv(HWW &, int itrk, int ipv)
std::vector< LorentzVector > & mus_trk_p4()
Definition: HWW.cc:371
std::vector< int > & mus_validHits()
Definition: HWW.cc:531
double muonIsoValue(HWW &, unsigned int, bool=true)
const T & max(const T &a, const T &b)
double p4[4]
Definition: TauolaWrapper.h:92
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::vector< float > & vtxs_ndof()
Definition: HWW.cc:9
std::vector< int > & pfcands_particleId()
Definition: HWW.cc:733
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< float > & mus_gfit_ndof()
Definition: HWW.cc:387
std::vector< LorentzVector > & vtxs_position()
Definition: HWW.cc:5
bool first
Definition: L1TdeRCT.cc:75
bool muonIdNotIsolated(HWW &, unsigned int index, SelectionType type)
Definition: HWW.h:11
std::vector< LorentzVector > & pfmus_p4()
Definition: HWW.cc:757
double mudzPV_wwV1(HWW &, unsigned int index)
double muonIsoValuePF(HWW &, unsigned int imu, unsigned int ivtx, float coner=0.4, float minptn=1.0, float dzcut=0.1, int filterId=0)
double mudzPV_smurfV3(HWW &, unsigned int index)
double muonIsoValue_ECAL(HWW &, unsigned int, bool=true)
std::vector< float > & mus_d0()
Definition: HWW.cc:403
std::pair< double, double > trks_dz_pv(HWW &, int itrk, int ipv)
double muonIsoValue_HCAL(HWW &, unsigned int, bool=true)
std::vector< float > & mus_sta_z0corr()
Definition: HWW.cc:487
std::vector< int > & vtxs_isFake()
Definition: HWW.cc:17
double mud0PV(HWW &, unsigned int index)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< float > > LorentzVector
Definition: pfjetMVAtools.h:10
double muonIsoValue_TRK(HWW &, unsigned int, bool=true)
std::vector< LorentzVector > & mus_vertex_p4()
Definition: HWW.cc:375
double dzPV_mu(HWW &hww, const LorentzVector &vtx, const LorentzVector &p4, const LorentzVector &pv)
std::vector< float > & vtxs_sumpt()
Definition: HWW.cc:13
std::vector< float > & mus_iso03_emEt()
Definition: HWW.cc:463
std::vector< int > & mus_type()
Definition: HWW.cc:555