LOGO

RestFrames  v1.0.1
RestFrames HEP Event Analysis Software Library
MaxProbBreitWignerCombJigsaw.cc
Go to the documentation of this file.
1 // RestFrames: particle physics event analysis library
3 // --------------------------------------------------------------------
4 // Copyright (c) 2014-2016, Christopher Rogan
14 // This file is part of RestFrames.
15 //
16 // RestFrames is free software; you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation; either version 2 of the License, or
19 // (at your option) any later version.
20 //
21 // RestFrames is distributed in the hope that it will be useful,
22 // but WITHOUT ANY WARRANTY; without even the implied warranty of
23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 // GNU General Public License for more details.
25 //
26 // You should have received a copy of the GNU General Public License
27 // along with RestFrames. If not, see <http://www.gnu.org/licenses/>.
29 
30 #include "RestFrames/RestFrame.hh"
32 
33 namespace RestFrames {
34 
36  const std::string& stitle,
37  int N_comb, int N_object)
38  : CombinatoricJigsaw(sname, stitle, N_comb, N_object),
39  m_Ncomb(N_comb), m_Nobj(N_object)
40  {
41  for(int i = 0; i < m_Nobj; i++){
42  m_Mass.push_back(0.);
43  m_Width.push_back(-1.);
44  }
45  }
46 
47  MaxProbBreitWignerCombJigsaw::~MaxProbBreitWignerCombJigsaw() {}
48 
50  if(i < 0 || i >= m_Nobj)
51  return;
52 
53  m_Mass[i] = std::max(mass, 0.);
54  }
55 
56  void MaxProbBreitWignerCombJigsaw::SetWidth(double width, int i){
57  if(i < 0 || i >= m_Nobj)
58  return;
59  if(width <= 0.)
60  m_Width[i] = -1.;
61  else
62  m_Width[i] = width;
63  }
64 
65  bool MaxProbBreitWignerCombJigsaw::EvaluateMetric(double& metric) const {
66  std::vector<TLorentzVector> P;
67 
68  if(!IsTransverse()){
69 
70  for(int i = 0; i < m_Nobj; i++)
71  P.push_back(GetDependancyStates(i).GetFourVector());
72 
73  } else {
74 
75  for(int i = 0; i < m_Nobj; i++){
76  P.push_back(TLorentzVector());
77  int N = GetDependancyStates(i).GetN();
78  for(int j = 0; j < N; j++){
79  TLorentzVector v = GetDependancyStates(i)[j].GetFourVector();
80  TVector3 p = v.Vect() - v.Vect().Dot(GetTransverseAxis())*GetTransverseAxis();
81  v.SetVectM(p, v.M());
82  P[i] += v;
83  }
84  }
85 
86  }
87 
88  double prob = 1.;
89  TLorentzVector SUM(0.,0.,0.,0.);
90  for(int i = 0; i < m_Nobj; i++)
91  SUM += P[i];
92  double M = SUM.M();
93  for(int i = 0; i < m_Nobj-1; i++){
94  SUM -= P[i];
95  prob *= GetP((P[i]+SUM).M(), P[i].M(), SUM.M())/M;
96  }
97 
98  double den;
99  for(int i = 0; i < m_Nobj; i++){
100  if(m_Width[i] > 0.){
101  den = P[i].M2()-m_Mass[i]*m_Mass[i];
102  den *= den;
103  den += m_Mass[i]*m_Mass[i]*m_Width[i]*m_Width[i];
104  if(den > 0.)
105  prob /= den;
106  }
107  }
108 
109  if(prob <= 0.)
110  return false;
111 
112  return 1./prob;
113  return true;
114  }
115 
116 }
117 
MaxProbBreitWignerCombJigsaw.hh
RestFrames::CombinatoricJigsaw
Definition: CombinatoricJigsaw.hh:40
RestFrames::MaxProbBreitWignerCombJigsaw::SetPoleMass
virtual void SetPoleMass(double mass, int i=0)
Sets pole mass of a frame.
Definition: MaxProbBreitWignerCombJigsaw.cc:49
RestFrames::MaxProbBreitWignerCombJigsaw::MaxProbBreitWignerCombJigsaw
MaxProbBreitWignerCombJigsaw(const std::string &sname, const std::string &stitle, int N_comb, int N_object)
Standard constructor.
Definition: MaxProbBreitWignerCombJigsaw.cc:35
RestFrame.hh
RestFrames::MaxProbBreitWignerCombJigsaw::SetWidth
virtual void SetWidth(double width, int i=0)
Sets width of a frame.
Definition: MaxProbBreitWignerCombJigsaw.cc:56