CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/src/TopQuarkAnalysis/TopJetCombination/src/TtSemiLepJetComb.cc

Go to the documentation of this file.
00001 #include "AnalysisDataFormats/TopObjects/interface/TtSemiLepEvtPartons.h"
00002 #include "TopQuarkAnalysis/TopJetCombination/interface/TtSemiLepJetComb.h"
00003 
00004 #include "Math/VectorUtil.h"
00005 
00006 TtSemiLepJetComb::TtSemiLepJetComb()
00007 {
00008 }
00009 
00010 TtSemiLepJetComb::TtSemiLepJetComb(const std::vector<pat::Jet>& jets, const std::vector<int>& combination,
00011                                    const math::XYZTLorentzVector& lepton, const pat::MET& neutrino)
00012 { 
00013   // receive right jet association
00014   // from jet-parton matching 
00015   hadQJet_    = jets[ combination[TtSemiLepEvtPartons::LightQ   ] ];
00016   hadQBarJet_ = jets[ combination[TtSemiLepEvtPartons::LightQBar] ];
00017   hadBJet_    = jets[ combination[TtSemiLepEvtPartons::HadB     ] ];
00018   lepBJet_    = jets[ combination[TtSemiLepEvtPartons::LepB     ] ]; 
00019   lepton_     = lepton;
00020   neutrino_   = neutrino;
00021   // create mother candidates from 
00022   // final-state candidates
00023   deduceMothers();
00024 }
00025 
00026 TtSemiLepJetComb::~TtSemiLepJetComb() 
00027 {
00028 }
00029 
00030 double TtSemiLepJetComb::topVar(JetComb::DecayType decay, JetComb::VarType var) const 
00031 {
00032   switch(var){
00033   case JetComb::kMass  : return top(decay).mass();
00034   case JetComb::kPt    : return top(decay).pt();
00035   case JetComb::kEta   : return top(decay).eta();
00036   case JetComb::kPhi   : return top(decay).phi();
00037   case JetComb::kTheta : return top(decay).theta();
00038   };
00039   return -9999.;
00040 }
00041 
00042 double TtSemiLepJetComb::wBosonVar(JetComb::DecayType decay, JetComb::VarType var) const 
00043 {
00044   switch(var){
00045   case JetComb::kMass  : return wBoson(decay).mass();
00046   case JetComb::kPt    : return wBoson(decay).pt();
00047   case JetComb::kEta   : return wBoson(decay).eta();
00048   case JetComb::kPhi   : return wBoson(decay).phi();
00049   case JetComb::kTheta : return wBoson(decay).theta();
00050   };
00051   return -9999.;
00052 }
00053 
00054 double TtSemiLepJetComb::bQuarkVar(JetComb::DecayType decay, JetComb::VarType var) const 
00055 {
00056   switch(var){
00057   case JetComb::kMass  : return -9999.;
00058   case JetComb::kPt    : return bQuark(decay).p4().pt();
00059   case JetComb::kEta   : return bQuark(decay).p4().eta();
00060   case JetComb::kPhi   : return bQuark(decay).p4().phi();
00061   case JetComb::kTheta : return bQuark(decay).p4().theta();
00062   };
00063   return -9999.;
00064 }
00065 
00066 double TtSemiLepJetComb::lightQVar(bool qbar, JetComb::VarType var) const 
00067 {
00068   switch(var){
00069   case JetComb::kMass  : return -9999.;
00070   case JetComb::kPt    : return lightQ(qbar).p4().pt();
00071   case JetComb::kEta   : return lightQ(qbar).p4().eta();
00072   case JetComb::kPhi   : return lightQ(qbar).p4().phi();
00073   case JetComb::kTheta : return lightQ(qbar).p4().theta();
00074   };
00075   return -9999.;
00076 }
00077 
00078 double TtSemiLepJetComb::leptonVar(JetComb::VarType var) const 
00079 {
00080   switch(var){
00081   case JetComb::kMass  : return -9999.;
00082   case JetComb::kPt    : return lepton_.pt();
00083   case JetComb::kEta   : return lepton_.eta();
00084   case JetComb::kPhi   : return lepton_.phi();
00085   case JetComb::kTheta : return lepton_.theta();
00086   };
00087   return -9999.;
00088 }
00089 
00090 double TtSemiLepJetComb::neutrinoVar(JetComb::VarType var) const 
00091 {
00092   switch(var){
00093   case JetComb::kMass  : return -9999.;
00094   case JetComb::kPt    : return neutrino_.p4().pt();
00095   case JetComb::kEta   : return neutrino_.p4().eta();
00096   case JetComb::kPhi   : return neutrino_.p4().phi();
00097   case JetComb::kTheta : return neutrino_.p4().theta();
00098   };
00099   return -9999.;
00100 }
00101 
00102 double TtSemiLepJetComb::compareHadTopLepTop(JetComb::CompType comp) const 
00103 {
00104   switch(comp){
00105   case JetComb::kDeltaM     : return top(JetComb::kHad).mass() - top(JetComb::kLep).mass();  
00106   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (top(JetComb::kHad), top(JetComb::kLep));
00107   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(top(JetComb::kHad), top(JetComb::kLep)));
00108   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (top(JetComb::kHad), top(JetComb::kLep));
00109   };
00110   return -9999.;
00111 }
00112 
00113 double TtSemiLepJetComb::compareHadWLepW(JetComb::CompType comp) const 
00114 {
00115   switch(comp){
00116   case JetComb::kDeltaM     : return wBoson(JetComb::kHad).mass() - wBoson(JetComb::kLep).mass();
00117   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (wBoson(JetComb::kHad), wBoson(JetComb::kLep));
00118   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(wBoson(JetComb::kHad), wBoson(JetComb::kLep)));
00119   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (wBoson(JetComb::kHad), wBoson(JetComb::kLep));
00120   };
00121   return -9999.;
00122 }
00123 
00124 double TtSemiLepJetComb::compareHadBLepB(JetComb::CompType comp) const 
00125 {
00126   switch(comp){
00127   case JetComb::kDeltaM     : return -9999.;
00128   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (bQuark(JetComb::kHad).p4(), bQuark(JetComb::kLep).p4());
00129   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(bQuark(JetComb::kHad).p4(), bQuark(JetComb::kLep).p4()));
00130   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (bQuark(JetComb::kHad).p4(), bQuark(JetComb::kLep).p4());
00131   };
00132   return -9999.;
00133 }
00134 
00135 double TtSemiLepJetComb::compareLightQuarks(JetComb::CompType comp) const 
00136 {
00137   switch(comp){
00138   case JetComb::kDeltaM     : return -9999.;
00139   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (lightQ().p4(), lightQ(true).p4());
00140   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(lightQ().p4(), lightQ(true).p4()));
00141   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (lightQ().p4(), lightQ(true).p4());
00142   };
00143   return -9999.;
00144 }
00145 
00146 double TtSemiLepJetComb::compareLeptonNeutrino(JetComb::CompType comp) const 
00147 {
00148   switch(comp){
00149   case JetComb::kDeltaM     : return -9999.;
00150   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (lepton_, neutrino_.p4());
00151   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(lepton_, neutrino_.p4()));
00152   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (lepton_, neutrino_.p4());
00153   };
00154   return -9999.;
00155 }
00156 
00157 double TtSemiLepJetComb::compareTopW(JetComb::DecayType dec1, JetComb::DecayType dec2, JetComb::CompType comp) const 
00158 {
00159   switch(comp){
00160   case JetComb::kDeltaM     : return top(dec1).mass() - wBoson(dec2).mass();
00161   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (top(dec1), wBoson(dec2));
00162   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(top(dec1), wBoson(dec2)));
00163   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (top(dec1), wBoson(dec2));
00164   };
00165   return -9999.;
00166 }
00167 
00168 double TtSemiLepJetComb::compareTopB(JetComb::DecayType dec1, JetComb::DecayType dec2, JetComb::CompType comp) const 
00169 {
00170   switch(comp){
00171   case JetComb::kDeltaM     : return -9999.;
00172   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (top(dec1), bQuark(dec2).p4());
00173   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(top(dec1), bQuark(dec2).p4()));
00174   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (top(dec1), bQuark(dec2).p4());
00175   };
00176   return -9999.;
00177 }
00178 
00179 double TtSemiLepJetComb::compareWB(JetComb::DecayType dec1, JetComb::DecayType dec2, JetComb::CompType comp) const 
00180 {
00181   switch(comp){
00182   case JetComb::kDeltaM     : return -9999.;
00183   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (wBoson(dec1), bQuark(dec2).p4());
00184   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(wBoson(dec1), bQuark(dec2).p4()));
00185   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (wBoson(dec1), bQuark(dec2).p4());
00186   };
00187   return -9999.;
00188 }
00189 
00190 double TtSemiLepJetComb::compareTopLepton(JetComb::DecayType decay, JetComb::CompType comp) const 
00191 {
00192   switch(comp){
00193   case JetComb::kDeltaM     : return -9999.;
00194   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (top(decay), lepton_);
00195   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(top(decay), lepton_));
00196   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (top(decay), lepton_);
00197   };
00198   return -9999.;
00199 }
00200 
00201 double TtSemiLepJetComb::compareTopNeutrino(JetComb::DecayType decay, JetComb::CompType comp) const 
00202 {
00203   switch(comp){
00204   case JetComb::kDeltaM     : return -9999.;
00205   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (top(decay), neutrino_.p4());
00206   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(top(decay), neutrino_.p4()));
00207   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (top(decay), neutrino_.p4());
00208   };
00209   return -9999.;
00210 }
00211 
00212 double TtSemiLepJetComb::compareWLepton(JetComb::DecayType decay, JetComb::CompType comp) const 
00213 {
00214   switch(comp){
00215   case JetComb::kDeltaM     : return -9999.;
00216   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (wBoson(decay), lepton_);
00217   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(wBoson(decay), lepton_));
00218   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (wBoson(decay), lepton_);
00219   };
00220   return -9999.;
00221 }
00222 
00223 double TtSemiLepJetComb::compareWNeutrino(JetComb::DecayType decay, JetComb::CompType comp) const 
00224 {
00225   switch(comp){
00226   case JetComb::kDeltaM     : return -9999.;
00227   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (wBoson(decay), neutrino_.p4());
00228   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(wBoson(decay), neutrino_.p4()));
00229   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (wBoson(decay), neutrino_.p4());
00230   };
00231   return -9999.;
00232 }
00233 
00234 double TtSemiLepJetComb::compareBLepton(JetComb::DecayType decay, JetComb::CompType comp) const 
00235 {
00236   switch(comp){
00237   case JetComb::kDeltaM     : return -9999.;
00238   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (bQuark(decay).p4(), lepton_);
00239   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(bQuark(decay).p4(), lepton_));
00240   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (bQuark(decay).p4(), lepton_);
00241   };
00242   return -9999.;
00243 }
00244 
00245 double TtSemiLepJetComb::compareBNeutrino(JetComb::DecayType decay, JetComb::CompType comp) const 
00246 {
00247   switch(comp){
00248   case JetComb::kDeltaM     : return -9999.;
00249   case JetComb::kDeltaR     : return      ROOT::Math::VectorUtil::DeltaR  (bQuark(decay).p4(), neutrino_.p4());
00250   case JetComb::kDeltaPhi   : return fabs(ROOT::Math::VectorUtil::DeltaPhi(bQuark(decay).p4(), neutrino_.p4()));
00251   case JetComb::kDeltaTheta : return      ROOT::Math::VectorUtil::Angle   (bQuark(decay).p4(), neutrino_.p4());
00252   };
00253   return -9999.;
00254 }
00255 
00256 double TtSemiLepJetComb::relativePtHadronicTop() const
00257 {
00258   return top(JetComb::kHad).pt()/(top(JetComb::kHad).pt()                                               +
00259                          (lightQ()    .p4()+lightQ(true).p4()+bQuark(JetComb::kLep).p4()).pt()          +
00260                          (lightQ()    .p4()+bQuark(JetComb::kHad).p4()+bQuark(JetComb::kLep).p4()).pt() +
00261                          (bQuark(JetComb::kHad).p4()+lightQ(true).p4()+bQuark(JetComb::kLep).p4()).pt()
00262                          ); 
00263 }
00264 
00265 double TtSemiLepJetComb::bOverLightQPt() const 
00266 {
00267   return (bQuark(JetComb::kHad).p4().pt()+bQuark(JetComb::kLep).p4().pt())/(lightQ().p4().pt()+lightQ(true).p4().pt());  
00268 }
00269 
00270 double TtSemiLepJetComb::combinedBTags(JetComb::BTagAlgo algo, JetComb::Operator op) const
00271 {
00272   switch(op){
00273   case JetComb::kAdd  : return bTag(JetComb::kHad, algo) + bTag(JetComb::kLep, algo);
00274   case JetComb::kMult : return bTag(JetComb::kHad, algo) * bTag(JetComb::kLep, algo);
00275   };
00276   return -9999.;
00277 }
00278 
00279 double TtSemiLepJetComb::combinedBTagsForLightQuarks(JetComb::BTagAlgo algo, JetComb::Operator op) const
00280 {
00281   switch(op){
00282   case JetComb::kAdd  : return bTag(lightQ(), algo) + bTag(lightQ(true), algo);
00283   case JetComb::kMult : return bTag(lightQ(), algo) * bTag(lightQ(true), algo);
00284   };
00285   return -9999.;
00286 }
00287 
00288 // ----------------------------------------------------------------------
00289 // private methods
00290 // ----------------------------------------------------------------------
00291 
00292 void 
00293 TtSemiLepJetComb::deduceMothers()
00294 {
00295   hadW_   = hadQJet_.p4() + hadQBarJet_.p4();
00296   lepW_   = lepton_       + neutrino_  .p4();
00297   hadTop_ = hadW_         + hadBJet_   .p4();
00298   lepTop_ = lepW_         + lepBJet_   .p4();
00299 }
00300 
00301 double TtSemiLepJetComb::bTag(const pat::Jet& jet, JetComb::BTagAlgo algo) const
00302 {
00303   switch(algo){
00304   case JetComb::kTrackCountHighEff : return jet.bDiscriminator("trackCountingHighEffBJetTags"      );
00305   case JetComb::kTrackCountHighPur : return jet.bDiscriminator("trackCountingHighPurBJetTags"      );
00306   case JetComb::kSoftMuon          : return jet.bDiscriminator("softMuonBJetTags"                  );
00307   case JetComb::kSoftMuonByPt      : return jet.bDiscriminator("softMuonByPtBJetTags"              );
00308   case JetComb::kSofMuonByIP3d     : return jet.bDiscriminator("softMuonByIP3dBJetTags"            );
00309   case JetComb::kSoftElec          : return jet.bDiscriminator("softElectronBJetTags"              );
00310   case JetComb::kProbability       : return jet.bDiscriminator("jetProbabilityBJetTags"            );
00311   case JetComb::kBProbability      : return jet.bDiscriminator("jetBProbabilityBJetTags"           );
00312   case JetComb::kSimpleSecondVtx   : return jet.bDiscriminator("simpleSecondaryVertexBJetTags"     );
00313   case JetComb::kCombSecondVtx     : return jet.bDiscriminator("combinedSecondaryVertexBJetTags"   );
00314   case JetComb::kCombSecondVtxMVA  : return jet.bDiscriminator("combinedSecondaryVertexMVABJetTags");
00315   };
00316   return -9999.;
00317 }