CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/RecoJets/FFTJetAlgorithms/src/adjustForPileup.cc

Go to the documentation of this file.
00001 #include "RecoJets/FFTJetAlgorithms/interface/adjustForPileup.h"
00002 
00003 namespace fftjetcms {
00004     math::XYZTLorentzVector adjustForPileup(
00005         const math::XYZTLorentzVector& jet,
00006         const math::XYZTLorentzVector& pileup,
00007         const bool subtractPileupAs4Vec)
00008     {
00009         const double pt = jet.Pt();
00010         if (pt > 0.0)
00011         {
00012             const double pileupPt = pileup.Pt();
00013             const double ptFactor = (pt - pileupPt)/pt;
00014             if (ptFactor <= 0.0)
00015                 return math::XYZTLorentzVector();
00016             else if (subtractPileupAs4Vec)
00017             {
00018                 const math::XYZTLorentzVector subtracted(jet - pileup);
00019                 const double e = subtracted.E();
00020                 if (e <= 0.0)
00021                     return math::XYZTLorentzVector();
00022                 else
00023                 {
00024                     // Avoid negative jet masses
00025                     const double px = subtracted.Px();
00026                     const double py = subtracted.Py();
00027                     const double pz = subtracted.Pz();
00028                     if (e*e < px*px + py*py + pz*pz)
00029                         // It is not clear what is the best thing to do here.
00030                         // For now, revert to Pt scaling.
00031                         return jet*ptFactor;
00032                     else
00033                         return subtracted;
00034                 }
00035             }
00036             else
00037                 return jet*ptFactor;
00038         }
00039         else
00040             return jet;
00041     }
00042 }