428 |
|
ret->SetDirectory(0); |
429 |
|
return ret; |
430 |
|
} |
431 |
+ |
//-------------------------------------------------------------------------------------------------- |
432 |
+ |
Bool_t MuonTools::PassD0Cut(const Muon *mu, const VertexCol *vertices, Double_t fD0Cut) |
433 |
+ |
{ |
434 |
+ |
Bool_t d0cut = kFALSE; |
435 |
+ |
const Track *mt = mu->BestTrk(); |
436 |
+ |
if (!mt) return kFALSE; |
437 |
|
|
438 |
+ |
Double_t d0_real = 1e30; |
439 |
+ |
for(UInt_t i0 = 0; i0 < vertices->GetEntries(); i0++) { |
440 |
+ |
if(vertices->At(i0)->NTracks() > 0){ |
441 |
+ |
Double_t pD0 = mt->D0Corrected(*vertices->At(i0)); |
442 |
+ |
d0_real = TMath::Abs(pD0); |
443 |
+ |
break; |
444 |
+ |
} |
445 |
+ |
} |
446 |
+ |
if(d0_real < fD0Cut) d0cut = kTRUE; |
447 |
+ |
|
448 |
+ |
return d0cut; |
449 |
+ |
} |
450 |
+ |
|
451 |
+ |
//-------------------------------------------------------------------------------------------------- |
452 |
+ |
Bool_t MuonTools::PassD0Cut(const Muon *mu, const BeamSpotCol *beamspots, Double_t fD0Cut) |
453 |
+ |
{ |
454 |
+ |
Bool_t d0cut = kFALSE; |
455 |
+ |
const Track *mt = mu->BestTrk(); |
456 |
+ |
if (!mt) return kFALSE; |
457 |
+ |
|
458 |
+ |
// d0 cut |
459 |
+ |
Double_t d0_real = 99999; |
460 |
+ |
for(UInt_t i0 = 0; i0 < beamspots->GetEntries(); i0++) { |
461 |
+ |
Double_t pD0 = mt->D0Corrected(*beamspots->At(i0)); |
462 |
+ |
if(TMath::Abs(pD0) < TMath::Abs(d0_real)) d0_real = TMath::Abs(pD0); |
463 |
+ |
} |
464 |
+ |
if(d0_real < fD0Cut) d0cut = kTRUE; |
465 |
+ |
|
466 |
+ |
return d0cut; |
467 |
+ |
} |
468 |
+ |
|
469 |
+ |
//-------------------------------------------------------------------------------------------------- |
470 |
+ |
Bool_t MuonTools::PassSoftMuonCut(const Muon *mu, const VertexCol *vertices) |
471 |
+ |
{ |
472 |
+ |
if(mu->Pt() <= 3.0) return kFALSE; |
473 |
+ |
|
474 |
+ |
if(!mu->IsTrackerMuon()) return kFALSE; |
475 |
+ |
|
476 |
+ |
if(!mu->Quality().Quality(MuonQuality::TMLastStationAngTight)) return kFALSE; |
477 |
+ |
|
478 |
+ |
if(mu->BestTrk()->NHits() <= 10) return kFALSE; |
479 |
+ |
|
480 |
+ |
if(!PassD0Cut(mu, vertices, 0.2)) return kFALSE; |
481 |
+ |
|
482 |
+ |
Double_t totalIso = 1.0 * mu->IsoR03SumPt() + |
483 |
+ |
1.0 * mu->IsoR03EmEt() + |
484 |
+ |
1.0 * mu->IsoR03HadEt(); |
485 |
+ |
if (totalIso < (mu->Pt()*0.10) && mu->Pt() > 20.0) return kFALSE; |
486 |
+ |
|
487 |
+ |
return kTRUE; |
488 |
+ |
} |