CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_3/src/TopQuarkAnalysis/TopJetCombination/src/TtSemiSimpleBestJetComb.cc

Go to the documentation of this file.
00001 //
00002 // $Id: TtSemiSimpleBestJetComb.cc,v 1.4 2008/02/17 11:27:55 rwolf Exp $
00003 //
00004 
00005 #include "TopQuarkAnalysis/TopJetCombination/interface/TtSemiSimpleBestJetComb.h"
00006 
00007 TtSemiSimpleBestJetComb::TtSemiSimpleBestJetComb() 
00008 {
00009 }
00010 
00011 TtSemiSimpleBestJetComb::~TtSemiSimpleBestJetComb() 
00012 {
00013 }
00014 
00015 int  TtSemiSimpleBestJetComb::operator()(std::vector<TtSemiEvtSolution> & sols)
00016 { 
00017   // search the highest probChi^2 value in the among the different jet combination solutions   
00018   double maxProbChi2 = 0;
00019   for(unsigned int s=0; s<sols.size(); s++)  maxProbChi2 = std::max(maxProbChi2,sols[s].getProbChi2());
00020   
00021   //search indices of original solutions with highest probChi2 value
00022   std::vector<unsigned int> indices;
00023   indices.clear();
00024   for(unsigned int s=0; s<sols.size(); s++){
00025     if(fabs(sols[s].getProbChi2()-maxProbChi2) < 0.0001) indices.push_back(s);
00026   }
00027      
00028   int bestSol = -999;
00029   if(maxProbChi2 > 0.){
00030     if(indices.size() == 1) bestSol = indices[0];
00031     if(indices.size() == 2) {
00032       //typically only light jets constraints applied, so still b-jet ambiguity to resolve 
00033       // -> look at DPhi(Whadr,bhadr) and choose smallest value
00034       double DPhi_Wb0 = fabs(sols[indices[0]].getFitHadW().phi()-sols[indices[0]].getFitHadb().phi());
00035       double DPhi_Wb1 = fabs(sols[indices[1]].getFitHadW().phi()-sols[indices[1]].getFitHadb().phi());
00036       if(DPhi_Wb0>3.1415) DPhi_Wb0 = 2.*3.1415-DPhi_Wb0;
00037       if(DPhi_Wb1>3.1415) DPhi_Wb1 = 2.*3.1415-DPhi_Wb1;
00038       if(DPhi_Wb0 < DPhi_Wb1){
00039          bestSol = indices[0];
00040       }
00041       else{
00042         bestSol = indices[1];
00043       }
00044     }
00045   }
00046   return bestSol;
00047 }