CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ZGlobalVsSAIsolationAnalyzer.cc
Go to the documentation of this file.
24 #include <vector>
25 #include <string>
26 #include <iostream>
27 
28 using namespace edm;
29 using namespace std;
30 using namespace reco;
31 using namespace isodeposit;
32 
34 public:
37 private:
38  virtual void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
39  virtual void endJob() override;
41  double dRVeto;
42  double dRTrk, dREcal, dRHcal;
43  double ptThreshold, etEcalThreshold, etHcalThreshold;
44  double alpha, beta;
45  double isoCut_;
46  unsigned long selGlobal_, selSA_, totGlobal_, totSA_;
47  bool isolated(const Direction & dir, const pat::IsoDeposit * trkIsoDep,
48  const pat::IsoDeposit * ecalIsoDep, const pat::IsoDeposit * hcalIsoDep);
49  void evaluate(const reco::Candidate* dau);
50 };
51 
53  srcToken_(consumes<CandidateView>(cfg.getParameter<InputTag>("src"))),
54  dRVeto(cfg.getParameter<double>("veto")),
55  dRTrk(cfg.getParameter<double>("deltaRTrk")),
56  dREcal(cfg.getParameter<double>("deltaREcal")),
57  dRHcal(cfg.getParameter<double>("deltaRHcal")),
58  ptThreshold(cfg.getParameter<double>("ptThreshold")),
59  etEcalThreshold(cfg.getParameter<double>("etEcalThreshold")),
60  etHcalThreshold(cfg.getParameter<double>("etHcalThreshold")),
61  alpha(cfg.getParameter<double>("alpha")),
62  beta(cfg.getParameter<double>("beta")),
63  isoCut_(cfg.getParameter<double>("isoCut")),
64  selGlobal_(0), selSA_(0), totGlobal_(0), totSA_(0) {
65 }
66 
68  const pat::IsoDeposit * ecalIsoDep, const pat::IsoDeposit * hcalIsoDep) {
69  IsoDeposit::AbsVetos vetoTrk, vetoEcal, vetoHcal;
70  vetoTrk.push_back(new ConeVeto(dir, dRVeto));
71  vetoTrk.push_back(new ThresholdVeto(ptThreshold));
72  vetoEcal.push_back(new ConeVeto(dir, 0.));
73  vetoEcal.push_back(new ThresholdVeto(etEcalThreshold));
74  vetoHcal.push_back(new ConeVeto(dir, 0.));
75  vetoHcal.push_back(new ThresholdVeto(etHcalThreshold));
76 
77  double trkIso = trkIsoDep->sumWithin(dir, dRTrk, vetoTrk);
78  double ecalIso = ecalIsoDep->sumWithin(dir, dREcal, vetoEcal);
79  double hcalIso = hcalIsoDep->sumWithin(dir, dRHcal, vetoHcal);
80  double iso = alpha*((0.5*(1+beta)*ecalIso) + (0.5*(1-beta)*hcalIso)) + (1-alpha)*trkIso;
81  return iso < isoCut_;
82 }
83 
85  const pat::Muon * mu = dynamic_cast<const pat::Muon *>(&*dau->masterClone());
86  if(mu == 0) throw Exception(errors::InvalidReference) << "Daughter is not a muon!\n";
87  const pat::IsoDeposit * trkIsoDep = mu->isoDeposit(pat::TrackIso);
88  const pat::IsoDeposit * ecalIsoDep = mu->isoDeposit(pat::EcalIso);
89  const pat::IsoDeposit * hcalIsoDep = mu->isoDeposit(pat::HcalIso);
90  // global muon
91  {
92  Direction dir = Direction(mu->eta(), mu->phi());
93  if(isolated(dir, trkIsoDep, ecalIsoDep, hcalIsoDep)) selGlobal_++;
94  totGlobal_++;
95  }
96  // stand-alone
97  {
99  Direction dir = Direction(sa->eta(), sa->phi());
100  if(isolated(dir, trkIsoDep, ecalIsoDep, hcalIsoDep)) selSA_++;
101  totSA_++;
102  }
103 }
104 
107  event.getByToken(srcToken_, dimuons);
108  for(unsigned int i=0; i< dimuons->size(); ++ i) {
109  const Candidate & zmm = (* dimuons)[i];
110  evaluate(zmm.daughter(0));
111  evaluate(zmm.daughter(1));
112  }
113 }
114 
116  cout << "Isolation efficiency report:" << endl;
117  double eff, err;
118  eff = double(selGlobal_)/double(totGlobal_);
119  err = sqrt(eff*(1.-eff)/double(totGlobal_));
120  cout <<"Global: " << selGlobal_ << "/" << totGlobal_ << " = " <<eff <<"+/-" << err<< endl;
121  eff = double(selSA_)/double(totSA_);
122  err = sqrt(eff*(1.-eff)/double(totSA_));
123  cout <<"St.Al.: " << selSA_ << "/" << totSA_ << " = " << eff <<"+/-" << err << endl;
124 }
125 
127 
const double beta
int i
Definition: DBlmapReader.cc:9
float alpha
Definition: AMPTWrapper.h:95
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
EDGetTokenT< CandidateView > srcToken_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
virtual float phi() const
momentum azimuthal angle
virtual void analyze(const edm::Event &event, const edm::EventSetup &setup) override
stand alone muon component tag
Definition: RecoCandidate.h:72
const IsoDeposit * isoDeposit(IsolationKeys key) const
Returns the IsoDeposit associated with some key, or a null pointer if it is not available.
Definition: Lepton.h:165
double sumWithin(double coneSize, const AbsVetos &vetos=AbsVetos(), bool skipDepositVeto=false) const
Definition: IsoDeposit.cc:138
virtual float eta() const
momentum pseudorapidity
T sqrt(T t)
Definition: SSEVec.h:48
ZGlobalVsSAIsolationAnalyzer(const edm::ParameterSet &cfg)
const int mu
Definition: Constants.h:22
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:14
void evaluate(const reco::Candidate *dau)
T get() const
get a component
Definition: Candidate.h:219
std::vector< AbsVeto * > AbsVetos
Definition: IsoDeposit.h:40
tuple cout
Definition: gather_cfg.py:121
bool isolated(const Direction &dir, const pat::IsoDeposit *trkIsoDep, const pat::IsoDeposit *ecalIsoDep, const pat::IsoDeposit *hcalIsoDep)
dbl *** dir
Definition: mlp_gen.cc:35
Analysis-level muon class.
Definition: Muon.h:50
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
virtual const CandidateBaseRef & masterClone() const =0