/ElectroWeakAnalysis/ZMuMu/plugins/ZToMuMuFilter.cc

https://github.com/aivanov-cern/cmssw · C++ · 72 lines · 61 code · 6 blank · 5 comment · 14 complexity · f58ce41944ae168b299b868cfe929d92 MD5 · raw file

  1. /* \class ZToMuMuFilter
  2. *
  3. * \author Juan Alcaraz, CIEMAT
  4. *
  5. */
  6. #include "FWCore/Framework/interface/EDFilter.h"
  7. #include "FWCore/Utilities/interface/InputTag.h"
  8. class ZToMuMuFilter : public edm::EDFilter {
  9. public:
  10. ZToMuMuFilter(const edm::ParameterSet &);
  11. private:
  12. virtual bool filter(edm::Event&, const edm::EventSetup&) override;
  13. edm::InputTag zCands_, muIso1_, muIso2_;
  14. double ptMin_, etaMin_, etaMax_, massMin_, massMax_, isoMax_;
  15. };
  16. #include "DataFormats/Common/interface/Handle.h"
  17. #include "FWCore/Framework/interface/Event.h"
  18. #include "FWCore/ParameterSet/interface/ParameterSet.h"
  19. #include "DataFormats/Candidate/interface/Candidate.h"
  20. #include "DataFormats/Candidate/interface/CandAssociation.h"
  21. using namespace edm;
  22. using namespace std;
  23. using namespace reco;
  24. ZToMuMuFilter::ZToMuMuFilter( const ParameterSet & cfg ) :
  25. zCands_(cfg.getParameter<InputTag>("zCands")),
  26. muIso1_(cfg.getParameter<InputTag>("muonIsolations1")),
  27. muIso2_(cfg.getParameter<InputTag>("muonIsolations2")),
  28. ptMin_(cfg.getParameter<double>("ptMin")),
  29. etaMin_(cfg.getParameter<double>("etaMin")),
  30. etaMax_(cfg.getParameter<double>("etaMax")),
  31. massMin_(cfg.getParameter<double>("massMin")),
  32. massMax_(cfg.getParameter<double>("massMax")),
  33. isoMax_(cfg.getParameter<double>("isoMax")) {
  34. }
  35. bool ZToMuMuFilter::filter (Event & ev, const EventSetup &) {
  36. Handle<CandidateCollection> zCands;
  37. ev.getByLabel(zCands_, zCands);
  38. Handle<CandDoubleAssociations> muIso1;
  39. ev.getByLabel(muIso1_, muIso1);
  40. Handle<CandDoubleAssociations> muIso2;
  41. ev.getByLabel(muIso2_, muIso2);
  42. unsigned int nZ = zCands->size();
  43. if (nZ == 0) return false;
  44. for(unsigned int i = 0; i < nZ; ++ i) {
  45. const Candidate & zCand = (*zCands)[i];
  46. double zMass = zCand.mass();
  47. if (zMass < massMin_ || zMass > massMax_) return false;
  48. if(zCand.numberOfDaughters()!=2) return false;
  49. const Candidate * dau0 = zCand.daughter(0);
  50. const Candidate * dau1 = zCand.daughter(1);
  51. double pt0 = dau0->pt(), pt1 = dau1->pt();
  52. if (pt0 < ptMin_ || pt1 < ptMin_) return false;
  53. double eta0 = dau0->eta(), eta1 = dau1->eta();
  54. if(eta0 < etaMin_ || eta0 > etaMax_) return false;
  55. if(eta1 < etaMin_ || eta1 > etaMax_) return false;
  56. CandidateRef mu0 = dau0->masterClone().castTo<CandidateRef>();
  57. CandidateRef mu1 = dau1->masterClone().castTo<CandidateRef>();
  58. double iso0 = (*muIso1)[mu0];
  59. double iso1 = (*muIso2)[mu1];
  60. if (iso0 > isoMax_) return false;
  61. if (iso1 > isoMax_) return false;
  62. }
  63. return true;
  64. }
  65. #include "FWCore/Framework/interface/MakerMacros.h"
  66. DEFINE_FWK_MODULE( ZToMuMuFilter );