10 #include "Math/PtEtaPhiE4D.h" 11 #include "Math/Vector3D.h" 12 #include "Math/LorentzVector.h" 35 for(
unsigned i=0;
i<fParameters.size();
i++) {
39 else if (ss ==
"L1JPTOffset")
41 else if (ss ==
"L2Relative")
43 else if (ss ==
"L3Absolute")
45 else if (ss ==
"L2L3Residual")
47 else if (ss ==
"L4EMF")
49 else if (ss ==
"L5Flavor")
51 else if (ss ==
"L6SLB")
53 else if (ss ==
"L7Parton")
55 else if (ss ==
"L1FastJet")
58 std::stringstream sserr;
59 sserr<<
"unknown correction level "<<ss;
60 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
83 for(
unsigned i=0;
i<tmp.size();
i++) {
84 if (tmp[
i] ==
"L1Offset")
86 else if (tmp[
i] ==
"L1JPTOffset")
88 else if (tmp[
i] ==
"L2Relative")
90 else if (tmp[
i] ==
"L3Absolute")
92 else if (tmp[
i] ==
"L2L3Residual")
94 else if (tmp[
i] ==
"L4EMF")
96 else if (tmp[
i] ==
"L5Flavor")
98 else if (tmp[
i] ==
"L6SLB")
100 else if (tmp[
i] ==
"L7Parton")
102 else if (tmp[
i] ==
"L1FastJet")
105 std::stringstream sserr;
106 sserr<<
"unknown correction level "<<tmp[
i];
107 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
121 else if (
mLevels[i]==
kL5 && FlavorOption.length()==0)
122 handleError(
"FactorizedJetCorrectorCalculator",
"must specify flavor option when requesting L5Flavor correction!");
123 else if (
mLevels[i]==
kL5 && FlavorOption.length()>0)
125 else if (
mLevels[i]==
kL7 && PartonOption.length()==0)
126 handleError(
"FactorizedJetCorrectorCalculator",
"must specify parton option when requesting L7Parton correction!");
127 else if (
mLevels[i]==
kL7 && PartonOption.length()>0)
130 std::stringstream sserr;
131 sserr<<
"unknown correction level "<<tmp[
i];
132 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
143 std::vector<VarTypes>
result;
144 for(
unsigned i=0;
i<fNames.size();
i++) {
148 else if (ss==
"JetEta")
150 else if (ss==
"JetPhi")
153 result.push_back(
kJetE);
154 else if (ss==
"JetEMF")
156 else if (ss==
"RelLepPt")
158 else if (ss==
"PtRel")
161 result.push_back(
kNPV);
163 result.push_back(
kJetA);
165 result.push_back(
kRho);
166 else if (ss==
"JPTrawE")
168 else if (ss==
"JPTrawEt")
170 else if (ss==
"JPTrawPt")
172 else if (ss==
"JPTrawEta")
174 else if (ss==
"JPTrawOff")
177 std::stringstream sserr;
178 sserr<<
"unknown parameter name: "<<ss;
179 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
190 if (fLevels.size() != fTags.size()) {
191 std::stringstream sserr;
192 sserr<<
"number of correction levels: "<<fLevels.size()<<
" doesn't match # of tags: "<<fTags.size();
193 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
196 for(
unsigned int i=0;
i<fTags.size();
i++) {
197 if ((
int)fTags[
i].find(fLevels[
i])<0) {
198 std::stringstream sserr;
199 sserr<<
"inconsistent tag: "<<fTags[
i]<<
" for "<<
"the requested correction: "<<fLevels[
i];
200 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
209 std::vector<std::string>
result;
210 unsigned int pos(0),j,newPos;
214 while (
pos<ss.length()) {
216 i = ss.find(
":" ,
pos);
218 result.push_back(ss);
221 else if (i<0 && pos>0) {
222 for(j=
pos;j<ss.length();j++)
224 result.push_back(tmp);
229 for(j=
pos;j<newPos;j++)
231 result.push_back(tmp);
243 int pos1(-1),pos2(-1);
245 pos1 = ss.find(type+
":");
249 pos2 = ss.find(
"&",pos1+type.length()+1);
251 result = ss.substr(pos1+type.length()+1,ss.length()-pos1-type.length()-1);
253 result = ss.substr(pos1+type.length()+1,pos2-pos1-type.length()-1);
264 for(
unsigned int i=0;
i<ss.length();
i++) {
265 aChar = ss.substr(
i,1);
285 std::vector<float> factors;
286 std::vector<float> vx,vy;
309 factors.push_back(factor);
321 std::vector<float>
result;
322 for(
unsigned i=0;
i<fVarTypes.size();
i++) {
325 handleError(
"FactorizedJetCorrectorCalculator",
"jet eta is not set");
326 result.push_back(iValues.
mJetEta);
328 else if (fVarTypes[
i] ==
kNPV) {
330 handleError(
"FactorizedJetCorrectorCalculator",
"number of primary vertices is not set");
331 result.push_back(iValues.
mNPV);
333 else if (fVarTypes[
i] ==
kJetPt) {
335 handleError(
"FactorizedJetCorrectorCalculator",
"jet pt is not set");
336 result.push_back(iValues.
mJetPt);
340 handleError(
"FactorizedJetCorrectorCalculator",
"jet phi is not set");
341 result.push_back(iValues.
mJetPhi);
343 else if (fVarTypes[
i] ==
kJetE) {
345 handleError(
"FactorizedJetCorrectorCalculator",
"jet E is not set");
346 result.push_back(iValues.
mJetE);
350 handleError(
"FactorizedJetCorrectorCalculator",
"jet EMF is not set");
351 result.push_back(iValues.
mJetEMF);
353 else if (fVarTypes[
i] ==
kJetA) {
355 handleError(
"FactorizedJetCorrectorCalculator",
"jet area is not set");
356 result.push_back(iValues.
mJetA);
358 else if (fVarTypes[
i] ==
kRho) {
360 handleError(
"FactorizedJetCorrectorCalculator",
"fastjet density Rho is not set");
361 result.push_back(iValues.
mRho);
365 handleError(
"FactorizedJetCorrectorCalculator",
"raw CaloJet P4 for JPT is not set");
370 handleError(
"FactorizedJetCorrectorCalculator",
"raw CaloJet P4 for JPT is not set");
375 handleError(
"FactorizedJetCorrectorCalculator",
"raw CaloJet P4 for JPT is not set");
380 handleError(
"FactorizedJetCorrectorCalculator",
"raw CaloJet P4 for JPT is not set");
385 handleError(
"FactorizedJetCorrectorCalculator",
"Offset correction for JPT is not set");
390 handleError(
"FactorizedJetCorrectorCalculator",
"can't calculate rel lepton pt");
393 else if (fVarTypes[
i] ==
kPtRel) {
395 handleError(
"FactorizedJetCorrectorCalculator",
"can't calculate ptrel");
396 result.push_back(
getPtRel(iValues));
399 std::stringstream sserr;
400 sserr<<
"unknown parameter "<<fVarTypes[
i];
401 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
426 typedef ROOT::Math::LorentzVector<ROOT::Math::PtEtaPhiE4D<float> >
428 typedef ROOT::Math::DisplacementVector3D<ROOT::Math::Cartesian3D<float> >
430 PtEtaPhiELorentzVector
jet;
432 jet.SetPt(iValues.
mJetPt);
435 jet.SetE(iValues.
mJetE);
437 float lj_x = (iValues.
mAddLepToJet) ? lep.X()+jet.Px() : jet.Px();
438 float lj_y = (iValues.
mAddLepToJet) ? lep.Y()+jet.Py() : jet.Py();
439 float lj_z = (iValues.
mAddLepToJet) ? lep.Z()+jet.Pz() : jet.Pz();
441 float lj2 = lj_x*lj_x+lj_y*lj_y+lj_z*lj_z;
443 std::stringstream sserr;
444 sserr<<
"lepton+jet momentum sq is not positive: "<<lj2;
445 handleError(
"FactorizedJetCorrectorCalculator",sserr.str());
447 float lep2 = lep.X()*lep.X()+lep.Y()*lep.Y()+lep.Z()*lep.Z();
449 float lepXlj = lep.X()*lj_x+lep.Y()*lj_y+lep.Z()*lj_z;
451 float pLrel2 = lepXlj*lepXlj/lj2;
453 float pTrel2 = lep2-pLrel2;
454 return (pTrel2 > 0) ?
std::sqrt(pTrel2) : 0.0;
479 mAddLepToJet =
false;
483 mIsJetPhiset =
false;
484 mIsJetEtaset =
false;
485 mIsJetEMFset =
false;
488 mIsJPTrawP4set =
false;
489 mIsJPTrawOFFset =
false;
493 mIsAddLepToJetset =
false;
548 mJPTrawE = fJPTrawP4.Energy();
549 mJPTrawEt = fJPTrawP4.Et();
550 mJPTrawPt = fJPTrawP4.Pt();
551 mJPTrawEta = fJPTrawP4.Eta();
552 mIsJPTrawP4set =
true;
557 mJPTrawOff = fJPTrawOff;
558 mIsJPTrawOFFset =
true;
581 mAddLepToJet = fAddLepToJet;
582 mIsAddLepToJetset =
true;
590 mIsJetPhiset =
false;
591 mIsJetEtaset =
false;
592 mIsJetEMFset =
false;
595 mIsJPTrawP4set =
false;
596 mIsJPTrawOFFset =
false;
600 mAddLepToJet =
false;
void setLepPx(float fLepPx)
void checkConsistency(const std::vector< std::string > &fLevels, const std::vector< std::string > &fTags)
void setLepPz(float fLepPz)
void setJetEta(float fEta)
float getLepPt(const VariableValues &) const
float getRelLepPt(const VariableValues &) const
~FactorizedJetCorrectorCalculator()
FactorizedJetCorrectorCalculator()
std::vector< float > fillVector(const std::vector< VarTypes > &fVarTypes, const VariableValues &) const
void setJPTrawP4(const TLorentzVector &fJPTrawP4)
std::vector< float > getSubCorrections(VariableValues &) const
std::vector< std::vector< VarTypes > > mParTypes
void setJPTrawOff(float fJPTrawOff)
std::vector< std::vector< VarTypes > > mBinTypes
void initCorrectors(const std::string &fLevels, const std::string &fFiles, const std::string &fOptions)
std::vector< VarTypes > mapping(const std::vector< std::string > &fNames) const
float getPtRel(const VariableValues &) const
PtEtaPhiELorentzVectorD PtEtaPhiELorentzVector
Lorentz vector with cartesian internal representation.
void setAddLepToJet(bool fAddLepToJet)
std::vector< std::vector< double > > tmp
std::string parseOption(const std::string &ss, const std::string &type) const
std::string removeSpaces(const std::string &ss) const
math::XYZVector XYZVector
void setLepPy(float fLepPy)
std::vector< SimpleJetCorrector const * > mCorrectors
float getCorrection(VariableValues &) const
std::vector< LevelTypes > mLevels
std::vector< std::string > parseLevels(const std::string &ss) const
void setJetEMF(float fEMF)