CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions
TtHadSimpleBestJetComb Class Reference

Based on the TtSemiSimpleBestJetComb.by: Jan Heyninck version: TtSemiSimpleBestJetComb.cc,v 1.2 2007/06/09 01:17:40 lowette Exp. More...

#include <TtHadSimpleBestJetComb.h>

Public Member Functions

int operator() (std::vector< TtHadEvtSolution > &)
 
 TtHadSimpleBestJetComb ()
 
 ~TtHadSimpleBestJetComb ()
 

Detailed Description

Based on the TtSemiSimpleBestJetComb.by: Jan Heyninck version: TtSemiSimpleBestJetComb.cc,v 1.2 2007/06/09 01:17:40 lowette Exp.

Simple method to get the correct jet combination in hadronic ttbar events. Returns the solution with the highest probChi^2 value, starting from TtHadEvtSolutions. If more than one solution has a low enough Chi^2, the chosen best solution is that which either have both b-jets closer to a particular W-jet or the one in which the two angles added together. WARNING WARNING WARNING, last option for selection best solution by taking the sum of angles needs to be checked/approved by experts!!!!

Definition at line 21 of file TtHadSimpleBestJetComb.h.

Constructor & Destructor Documentation

TtHadSimpleBestJetComb::TtHadSimpleBestJetComb ( )

Definition at line 19 of file TtHadSimpleBestJetComb.cc.

20 {
21 }
TtHadSimpleBestJetComb::~TtHadSimpleBestJetComb ( )

Definition at line 23 of file TtHadSimpleBestJetComb.cc.

24 {
25 }

Member Function Documentation

int TtHadSimpleBestJetComb::operator() ( std::vector< TtHadEvtSolution > &  sols)

Definition at line 27 of file TtHadSimpleBestJetComb.cc.

References i, bookConverter::max, phi, and alignCSCRings::s.

28 {
29  // search the highest probChi^2 value in the among the different jet combination solutions
30  double maxProbChi2 = 0.;
31  for(unsigned int s=0; s<sols.size(); s++){
32  maxProbChi2 = std::max(maxProbChi2,sols[s].getProbChi2());
33  }
34 
35  //search indices of original solutions with highest probChi2 value and select those solutionsthat are close to the highest Chi^2
36  std::vector<unsigned int> indices;
37  indices.clear();
38  for(unsigned int s=0; s<sols.size(); s++){
39  if(fabs(sols[s].getProbChi2()-maxProbChi2) < 0.0001) indices.push_back(s);
40  }
41 
42  // TtHadSolutionMaker takes light jet combinations into account, but not b-jet ambiguity...
43  int bestSol = -999;
44  double prev_W1b = 999.;
45  double prev_W2b = 999.;
46  if(maxProbChi2 > 0.){
47  if(indices.size() == 1) bestSol = indices[0];
48  if(indices.size() > 1){ //for more than one solution...
49  for(unsigned int i=0;i!=indices.size();i++){
50  double DPhi_W1b0 = fabs(sols[indices[i]].getFitHadW_plus().phi()-sols[indices[i]].getFitHadb().phi());
51  double DPhi_W1b1 = fabs(sols[indices[i]].getFitHadW_plus().phi()-sols[indices[i]].getFitHadbbar().phi());
52  double DPhi_W2b0 = fabs(sols[indices[i]].getFitHadW_minus().phi()-sols[indices[i]].getFitHadb().phi());
53  double DPhi_W2b1 = fabs(sols[indices[i]].getFitHadW_minus().phi()-sols[indices[i]].getFitHadbbar().phi());
54 
55  if(DPhi_W1b0>3.1415) DPhi_W1b0 = 2.*3.1415-DPhi_W1b0;
56  if(DPhi_W1b1>3.1415) DPhi_W1b1 = 2.*3.1415-DPhi_W1b1;
57  if(DPhi_W2b0>3.1415) DPhi_W2b0 = 2.*3.1415-DPhi_W2b0;
58  if(DPhi_W2b1>3.1415) DPhi_W2b1 = 2.*3.1415-DPhi_W2b1;
59  // Select as best solution the one which either has both b-jets closer to a particular W-jet
60  // or the one in which the two angles added together are lower than the other.....FIXME!!!
61  // W1b0 and W1b1 is a pair, W2b0 and W2b1
62  if(DPhi_W1b0<DPhi_W2b0 && DPhi_W1b1<DPhi_W2b1){
63  if(DPhi_W1b0<prev_W1b && DPhi_W1b1<prev_W2b){
64  bestSol = indices[i];
65  }
66  }
67  if(DPhi_W1b0>DPhi_W2b0 && DPhi_W1b1>DPhi_W2b1){
68  if(DPhi_W2b0<prev_W1b && DPhi_W2b1<prev_W2b){
69  bestSol = indices[i];
70  }
71  }
72  if((DPhi_W1b0<DPhi_W2b0 && DPhi_W1b1>DPhi_W2b1)||(DPhi_W1b0>DPhi_W2b0 && DPhi_W1b1<DPhi_W2b1)){
73  if((DPhi_W1b0+DPhi_W1b1)<(DPhi_W2b0+DPhi_W2b1)){
74  if(DPhi_W1b0<prev_W1b && DPhi_W1b1<prev_W2b){
75  bestSol = indices[i];
76  }
77  }else{
78  if(DPhi_W2b0<prev_W1b && DPhi_W2b1<prev_W2b){
79  bestSol = indices[i];
80  }
81  }
82  }
83  }
84  }
85  }
86  return bestSol;
87 }
int i
Definition: DBlmapReader.cc:9