CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CutsIsolatorWithCorrection.cc
Go to the documentation of this file.
2 
5 
6 using namespace muonisolation;
7 
10  theCuts(par.getParameter<std::vector<double> > ("EtaBounds"),
11  par.getParameter<std::vector<double> > ("ConeSizes"),
12  par.getParameter<std::vector<double> > ("Thresholds")),
13  theCutsRel(par.getParameter<std::vector<double> > ("EtaBoundsRel"),
14  par.getParameter<std::vector<double> > ("ConeSizesRel"),
15  par.getParameter<std::vector<double> > ("ThresholdsRel")),
16  theCutAbsIso(par.getParameter<bool>("CutAbsoluteIso")),
17  theCutRelativeIso(par.getParameter<bool>("CutRelativeIso")),
18  theUseRhoCorrection(par.getParameter<bool>("UseRhoCorrection")),
19  theRhoToken(iC.consumes<double>(par.getParameter<edm::InputTag>("RhoSrc"))),
20  theRhoMax(par.getParameter<double>("RhoMax")),
21  theRhoScaleBarrel(par.getParameter<double>("RhoScaleBarrel")),
22  theRhoScaleEndcap(par.getParameter<double>("RhoScaleEndcap")),
23  theEffAreaSFBarrel(par.getParameter<double>("EffAreaSFBarrel")),
24  theEffAreaSFEndcap(par.getParameter<double>("EffAreaSFEndcap")),
25  theReturnAbsoluteSum(par.getParameter<bool>("ReturnAbsoluteSum")),
26  theReturnRelativeSum(par.getParameter<bool>("ReturnRelativeSum")),
27  theAndOrCuts(par.getParameter<bool>("AndOrCuts"))
28 {
29  if (! ( theCutAbsIso || theCutRelativeIso ) ) throw cms::Exception("BadConfiguration")
30  << "Something has to be cut: set either CutAbsoluteIso or CutRelativeIso to true";
31 }
32 
33 double CutsIsolatorWithCorrection::depSum(const DepositContainer& deposits, double dr, double corr) const {
34  double dephlt = -corr;
35  unsigned int nDeps = deposits.size();
36  // edm::LogWarning("CutsIsolatorWithCorrection::depSumIn")
37  // << "add nDeposit "<< nDeps<< " \t dr "<<dr<<" \t corr "<<corr;
38  for(unsigned int iDep = 0; iDep < nDeps; ++iDep ){
39  double lDep = deposits[iDep].dep->depositWithin(dr);
40  dephlt += lDep;
41  // edm::LogWarning("CutsIsolatorWithCorrection::depSumIDep")
42  // <<"dep "<<iDep<<" \t added "<<lDep<<" \t sumnow "<<dephlt;
43  }
44 
45  return dephlt;
46 }
47 
50 
51  bool absDecision = false;
52  bool relDecision = false;
53 
54  double rho = 0.0;
55  double effAreaSF = 1.0;
56 
57  static const double pi = 3.14159265358979323846;
58 
59  // edm::LogWarning("CutsIsolatorWithCorrection::resultIn")
60  // <<"Start tk.pt "<<tk.pt()<<" \t tk.eta "<<tk.eta()<<" \t tk.phi "<<tk.phi();
61 
62 
63 
65  edm::Handle<double> rhoHandle;
66  ev->getByToken(theRhoToken, rhoHandle);
67  rho = *(rhoHandle.product());
68  if (rho < 0.0) rho = 0.0;
69  double rhoScale = fabs(tk.eta()) > 1.442 ? theRhoScaleEndcap : theRhoScaleBarrel;
70  effAreaSF = fabs(tk.eta()) > 1.442 ? theEffAreaSFEndcap : theEffAreaSFBarrel;
71  // edm::LogWarning("CutsIsolatorWithCorrection::resultInRho")
72  // << "got rho "<<rho<<" vs max "<<theRhoMax<<" will scale by "<<rhoScale;
73  if (rho > theRhoMax){
74  rho = theRhoMax;
75  }
76  rho = rho*rhoScale;
77  // edm::LogWarning("CutsIsolatorWithCorrection::resultOutRho")<<" final rho "<<rho;
78  }
79 
80  if (theCutAbsIso){
81  muonisolation::Cuts::CutSpec cuts_here = theCuts(tk.eta());
82  double conesize = cuts_here.conesize;
83  double dephlt = depSum(deposits, conesize, rho*conesize*conesize*pi*effAreaSF);
84  if (theReturnAbsoluteSum ) answer.valFloat = (float)dephlt;
85  if (dephlt<cuts_here.threshold) {
86  absDecision = true;
87  } else {
88  absDecision = false;
89  }
90  // edm::LogWarning("CutsIsolatorWithCorrection::resultOutAbsIso")
91  // <<"compared dephlt "<<dephlt<<" \t with "<<cuts_here.threshold;
92  } else absDecision = true;
93 
94  if (theCutRelativeIso){
96  double conesize = cuts_here.conesize;
97  double dephlt = depSum(deposits, conesize, rho*conesize*conesize*pi*effAreaSF)/tk.pt();
98  if (theReturnRelativeSum ) answer.valFloat = (float)dephlt;
99  if (dephlt<cuts_here.threshold) {
100  relDecision = true;
101  } else {
102  relDecision = false;
103  }
104  // edm::LogWarning("CutsIsolatorWithCorrection::resultOutRelIso")
105  // <<"compared dephlt "<<dephlt<<" \t with "<<cuts_here.threshold;
106  } else relDecision = true;
107 
108 
109  if (theAndOrCuts){
110  answer.valBool = absDecision && relDecision;
111  } else {
112  answer.valBool = absDecision || relDecision;
113  }
114 
115  // edm::LogWarning("CutsIsolatorWithCorrection::result")
116  // <<"isAbsIsolated "<<absDecision<<" \t isRelIsolated "<<relDecision
117  // <<" \t combined with AND "<<theAndOrCuts
118  // <<" = " << answer.valBool;
119 
120  return answer;
121 }
answer
Definition: submit.py:44
double depSum(const DepositContainer &deposits, double dr, double corr) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
bool ev
const Double_t pi
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:638
double pt() const
track transverse momentum
Definition: TrackBase.h:608
JetCorrectorParameters corr
Definition: classes.h:5
T const * product() const
Definition: Handle.h:81
std::vector< DepositAndVetos > DepositContainer
virtual Result result(const DepositContainer &deposits, const edm::Event *=0) const
Compute and return the isolation variable.
edm::EDGetTokenT< double > theRhoToken
CutsIsolatorWithCorrection(const edm::ParameterSet &par, edm::ConsumesCollector &&iC)