CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
JetCorrectionUncertainty.cc
Go to the documentation of this file.
5 #include "Math/PtEtaPhiE4D.h"
6 #include "Math/Vector3D.h"
7 #include "Math/LorentzVector.h"
8 #include <vector>
9 #include <string>
10 
13 {
14  mJetEta = -9999;
15  mJetPt = -9999;
16  mJetPhi = -9999;
17  mJetE = -9999;
18  mJetEMF = -9999;
19  mLepPx = -9999;
20  mLepPy = -9999;
21  mLepPz = -9999;
22  mIsJetEset = false;
23  mIsJetPtset = false;
24  mIsJetPhiset = false;
25  mIsJetEtaset = false;
26  mIsJetEMFset = false;
27  mIsLepPxset = false;
28  mIsLepPyset = false;
29  mIsLepPzset = false;
30  mAddLepToJet = false;
32 }
35 {
36  mJetEta = -9999;
37  mJetPt = -9999;
38  mJetPhi = -9999;
39  mJetE = -9999;
40  mJetEMF = -9999;
41  mLepPx = -9999;
42  mLepPy = -9999;
43  mLepPz = -9999;
44  mIsJetEset = false;
45  mIsJetPtset = false;
46  mIsJetPhiset = false;
47  mIsJetEtaset = false;
48  mIsJetEMFset = false;
49  mIsLepPxset = false;
50  mIsLepPyset = false;
51  mIsLepPzset = false;
52  mAddLepToJet = false;
54 }
57 {
58  mJetEta = -9999;
59  mJetPt = -9999;
60  mJetPhi = -9999;
61  mJetE = -9999;
62  mJetEMF = -9999;
63  mLepPx = -9999;
64  mLepPy = -9999;
65  mLepPz = -9999;
66  mIsJetEset = false;
67  mIsJetPtset = false;
68  mIsJetPhiset = false;
69  mIsJetEtaset = false;
70  mIsJetEMFset = false;
71  mIsLepPxset = false;
72  mIsLepPyset = false;
73  mIsLepPzset = false;
74  mAddLepToJet = false;
76 }
79 {
80  delete mUncertainty;
81 }
84 {
85  //---- delete the mParameters pointer before setting the new address ---
86  delete mUncertainty;
88 }
91 {
92  float result;
93  std::vector<float> vx,vy;
96  result = mUncertainty->uncertainty(vx,vy[0],fDirection);
97  mIsJetEset = false;
98  mIsJetPtset = false;
99  mIsJetPhiset = false;
100  mIsJetEtaset = false;
101  mIsJetEMFset = false;
102  mIsLepPxset = false;
103  mIsLepPyset = false;
104  mIsLepPzset = false;
105  return result;
106 }
107 //------------------------------------------------------------------------
108 //--- Reads the parameter names and fills a vector of floats -------------
109 //------------------------------------------------------------------------
110 std::vector<float> JetCorrectionUncertainty::fillVector(const std::vector<std::string>& fNames)
111 {
112  std::vector<float> result;
113  for(unsigned i=0;i<fNames.size();i++)
114  {
115  if (fNames[i] == "JetEta")
116  {
117  if (!mIsJetEtaset) {
118  edm::LogError("JetCorrectionUncertainty::")<<" jet eta is not set";
119  result.push_back(-999.0);
120  } else {
121  result.push_back(mJetEta);
122  }
123  }
124  else if (fNames[i] == "JetPt")
125  {
126  if (!mIsJetPtset){
127  edm::LogError("JetCorrectionUncertainty::")<<" jet pt is not set";
128  result.push_back(-999.0);
129  } else {
130  result.push_back(mJetPt);
131  }
132  }
133  else if (fNames[i] == "JetPhi")
134  {
135  if (!mIsJetPhiset) {
136  edm::LogError("JetCorrectionUncertainty::")<<" jet phi is not set";
137  result.push_back(-999.0);
138  } else {
139  result.push_back(mJetPt);
140  }
141  }
142  else if (fNames[i] == "JetE")
143  {
144  if (!mIsJetEset) {
145  edm::LogError("JetCorrectionUncertainty::")<<" jet energy is not set";
146  result.push_back(-999.0);
147  } else {
148  result.push_back(mJetE);
149  }
150  }
151  else if (fNames[i] == "JetEMF")
152  {
153  if (!mIsJetEMFset) {
154  edm::LogError("JetCorrectionUncertainty::")<<" jet emf is not set";
155  result.push_back(-999.0);
156  } else {
157  result.push_back(mJetEMF);
158  }
159  }
160  else if (fNames[i] == "LepPx")
161  {
162  if (!mIsLepPxset){
163  edm::LogError("JetCorrectionUncertainty::")<<" lepton px is not set";
164  result.push_back(-999.0);
165  } else {
166  result.push_back(mLepPx);
167  }
168  }
169  else if (fNames[i] == "LepPy")
170  {
171  if (!mIsLepPyset){
172  edm::LogError("JetCorrectionUncertainty::")<<" lepton py is not set";
173  result.push_back(-999.0);
174  } else {
175  result.push_back(mLepPy);
176  }
177  }
178  else if (fNames[i] == "LepPz")
179  {
180  if (!mIsLepPzset){
181  edm::LogError("JetCorrectionUncertainty::")<<" lepton pz is not set";
182  result.push_back(-999.0);
183  } else {
184  result.push_back(mLepPz);
185  }
186  }
187 
188  else {
189  edm::LogError("JetCorrectionUncertainty::")<<" unknown parameter "<<fNames[i];
190  result.push_back(-999.0);
191  }
192  }
193  return result;
194 }
195 //------------------------------------------------------------------------
196 //--- Calculate the PtRel (needed for the SLB) ---------------------------
197 //------------------------------------------------------------------------
199 {
200  typedef ROOT::Math::LorentzVector<ROOT::Math::PtEtaPhiE4D<float> > PtEtaPhiELorentzVector;
201  typedef ROOT::Math::DisplacementVector3D<ROOT::Math::Cartesian3D<float> > XYZVector;
202  PtEtaPhiELorentzVector jet;
203  XYZVector lep;
204  jet.SetPt(mJetPt);
205  jet.SetEta(mJetEta);
206  jet.SetPhi(mJetPhi);
207  jet.SetE(mJetE);
208  lep.SetXYZ(mLepPx,mLepPy,mLepPz);
209  float lj_x = (mAddLepToJet) ? lep.X()+jet.Px() : jet.Px();
210  float lj_y = (mAddLepToJet) ? lep.Y()+jet.Py() : jet.Py();
211  float lj_z = (mAddLepToJet) ? lep.Z()+jet.Pz() : jet.Pz();
212  // absolute values squared
213  float lj2 = lj_x*lj_x+lj_y*lj_y+lj_z*lj_z;
214  float pTrel2 = -999.0;
215  if (lj2 > 0) {
216  float lep2 = lep.X()*lep.X()+lep.Y()*lep.Y()+lep.Z()*lep.Z();
217  // projection vec(mu) to lepjet axis
218  float lepXlj = lep.X()*lj_x+lep.Y()*lj_y+lep.Z()*lj_z;
219  // absolute value squared and normalized
220  float pLrel2 = lepXlj*lepXlj/lj2;
221  // lep2 = pTrel2 + pLrel2
222  pTrel2 = lep2-pLrel2;
223  } else
224  edm::LogError("JetCorrectionUncertainty")<<" not positive lepton-jet momentum: "<<lj2;
225  return (pTrel2 > 0) ? std::sqrt(pTrel2) : 0.0;
226 }
227 //------------------------------------------------------------------------
228 //--- Setters ------------------------------------------------------------
229 //------------------------------------------------------------------------
231 {
232  mJetEta = fEta;
233  mIsJetEtaset = true;
234 }
235 //------------------------------------------------------------------------
237 {
238  mJetPt = fPt;
239  mIsJetPtset = true;
240 }
241 //------------------------------------------------------------------------
243 {
244  mJetPhi = fPhi;
245  mIsJetPhiset = true;
246 }
247 //------------------------------------------------------------------------
249 {
250  mJetE = fE;
251  mIsJetEset = true;
252 }
253 //------------------------------------------------------------------------
255 {
256  mJetEMF = fEMF;
257  mIsJetEMFset = true;
258 }
259 //------------------------------------------------------------------------
261 {
262  mLepPx = fPx;
263  mIsLepPxset = true;
264 }
265 //------------------------------------------------------------------------
267 {
268  mLepPy = fPy;
269  mIsLepPyset = true;
270 }
271 //------------------------------------------------------------------------
273 {
274  mLepPz = fPz;
275  mIsLepPzset = true;
276 }
277 //------------------------------------------------------------------------
int i
Definition: DBlmapReader.cc:9
SimpleJetCorrectionUncertainty * mUncertainty
const Definitions & definitions() const
std::vector< std::string > parVar() const
T sqrt(T t)
Definition: SSEVec.h:48
tuple result
Definition: query.py:137
PtEtaPhiELorentzVectorD PtEtaPhiELorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:27
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
void setParameters(const std::string &fDataFile)
float uncertainty(const std::vector< float > &fX, float fY, bool fDirection) const
float getUncertainty(bool fDirection)
std::vector< float > fillVector(const std::vector< std::string > &fNames)
std::vector< std::string > binVar() const
const JetCorrectorParameters & parameters() const