MINT2
DecayTreeComparisons.cpp
Go to the documentation of this file.
1 // author: Jonas Rademacker (Jonas.Rademacker@bristol.ac.uk)
2 // status: Mon 9 Feb 2009 19:18:03 GMT
3 #include "Mint/DecayTree.h"
5 #include <algorithm>
6 
7 using namespace MINT;
8 
10  // first handle bad pointers
11  if(0 == a && 0==b) return false;
12  if(0 == a && 0!=b) return true;
13  if(0 !=a && 0==b) return false;
14 
15  return a->getVal().SVPAT() < b->getVal().SVPAT();
16 }
17 
19  // first handle bad pointers
20  if(0 == a && 0==b) return false;
21  if(0 == a && 0!=b) return true;
22  if(0 !=a && 0==b) return false;
23 
24  if(a->getVal().SVPAT() == b->getVal().SVPAT()){
25  return a->getVal().L() < b->getVal().L();
26  }else{
27  return a->getVal().SVPAT() < b->getVal().SVPAT();
28  }
29 }
30 
34  return true;
35 }
36 
40  return true;
41 }
42 
43 
45  // first handle bad pointers
46  if(0 == a && 0==b) return false;
47  if(0 == a && 0!=b) return true;
48  if(0 !=a && 0==b) return false;
49 
50  return a->nDgtr() > b->nDgtr();
51 }
52 
55  return true;
56 }
57 
59  // first handle bad pointers
60  if(0 == a && 0==b) return false;
61  if(0 == a && 0!=b) return true;
62  if(0 !=a && 0==b) return false;
63 
64  return a->getVal().mass() > b->getVal().mass();
65 }
67  // first handle bad pointers
68  if(0 == a && 0==b) return false;
69  if(0 == a && 0!=b) return true;
70  if(0 !=a && 0==b) return false;
71 
72  return a->getVal().L() > b->getVal().L();
73 }
74 
76  A.sortAllBy<moreByMass>();
77  return true;
78 }
80  A.sortAllBy<moreByL>();
81  return true;
82 }
83 
85  // first handle bad pointers
86  if(0 == a && 0==b) return false;
87  if(0 == a && 0!=b) return true;
88  if(0 !=a && 0==b) return false;
89 
90  return a->getVal().pdg() > b->getVal().pdg();
91 }
92 
94  A.sortAllBy<moreByID>();
95  return true;
96 }
97 
100 
101  // sorts by abs ID but is still unique. When two
102  // particles have same abs ID, the one with
103  // the positive id comes first
104 
105  // first handle bad pointers
106  if(0 == a && 0==b) return false;
107  if(0 == a && 0!=b) return true;
108  if(0 !=a && 0==b) return false;
109 
110  int abs_a = abs(a->getVal().pdg());
111  int abs_b = abs(b->getVal().pdg());
112 
113  if(abs_a == abs_b) {
114  return a->getVal().pdg() > b->getVal().pdg();
115  }else{
116  return abs_a > abs_b;
117  }
118 }
119 
122  return true;
123 }
124 
126 
127  bool isAnti=(A.getVal().pdg() < 0);
128  if(isAnti) anti(A);
129 
130  sortByMoreL(A);
131 
133  //this gives unique starting point.
134 
135  sortByMoreMass(A);
136  sortByMoreDgtr(A);
137 
138  if(isAnti) anti(A);
139  return true;
140 }
141 
142 bool equalBySVPATRec(const DecayTree& A, const DecayTree& B){
143  // checks if the two decays have the same
144  // Scalar/Vector/Pseudoscalar/Axialvector
145  // structure. Superseded by equalBySVPATLRec to identify the
146  // right spin factor for each
147  // decay amplitude.
148 
149  // A and B already sorted - important!
150 
151  if(A.nDgtr() != B.nDgtr()){
152  return false;
153  }
154  for(int i=0; i<A.nDgtr(); i++){
155  if(! equalBySVPATRec(*(A.getDgtrTreePtr(i)), *(B.getDgtrTreePtr(i)))){
156  return false;
157  }
158  }
159 
160  return A.getVal().SVPAT() == B.getVal().SVPAT();
161 }
162 
163 bool equalBySVPAT_LRec(const DecayTree& A, const DecayTree& B){
164  // checks if the two decays have the same
165  // Scalar/Vector/Pseudoscalar/Axialvector
166  // structure. And the same orbital angular momenta
167  // in the decays. Used to identify the
168  // right spin factor for each
169  // decay amplitude.
170 
171  // A and B already sorted - important!
172 
173  if(A.nDgtr() != B.nDgtr()){
174  return false;
175  }
176  for(int i=0; i<A.nDgtr(); i++){
177  if(! equalBySVPAT_LRec(*(A.getDgtrTreePtr(i)), *(B.getDgtrTreePtr(i)))){
178  return false;
179  }
180  }
181 
182  bool equality = ( A.getVal().SVPAT() == B.getVal().SVPAT() )
183  && ( A.getVal().L() == B.getVal().L() );
184 
185 
186  return equality;
187 }
188 
189 
191  sortBySVPAT(A);
192  sortBySVPAT(B);
193 
194  return equalBySVPATRec(A,B);
195 }
197  sortBySVPAT_L(A);
198  sortBySVPAT_L(B);
199 
200  return equalBySVPAT_LRec(A,B);
201 }
202 
203 
204 //
bool sortByMoreID(DecayTree &A)
bool sortByMoreL(DecayTree &A)
void anti(DecayTree &dt)
Definition: DecayTree.cpp:16
bool operator()(MINT::const_counted_ptr< DecayTree > a, MINT::const_counted_ptr< DecayTree > b) const
std::string SVPAT() const
bool sortByMoreDgtr(DecayTree &A)
bool equalBySVPATRec(const DecayTree &A, const DecayTree &B)
bool equalBySVPAT(DecayTree A, DecayTree B)
const ValueType & getVal() const
Definition: DDTree.h:102
bool operator()(MINT::const_counted_ptr< DecayTree > a, MINT::const_counted_ptr< DecayTree > b) const
bool operator()(MINT::const_counted_ptr< DecayTree > a, MINT::const_counted_ptr< DecayTree > b) const
void sortAllBy()
Definition: DDTree.h:82
double mass() const
MINT::const_counted_ptr< DDTree< ValueType > > getDgtrTreePtr(int i) const
Definition: DDTree.h:114
bool operator()(MINT::const_counted_ptr< DecayTree > a, MINT::const_counted_ptr< DecayTree > b) const
bool sortByMoreAbsID_stillUnique(DecayTree &A)
Definition: DDTree.h:37
bool sortBySVPAT(DecayTree &A)
int L() const
Definition: DecayTreeItem.h:59
bool equalBySVPAT_L(DecayTree A, DecayTree B)
bool standardSort(DecayTree &A)
int pdg() const
int nDgtr() const
Definition: DDTree.h:96
bool operator()(MINT::const_counted_ptr< DecayTree > a, MINT::const_counted_ptr< DecayTree > b) const
bool sortBySVPAT_L(DecayTree &A)
bool sortByMoreMass(DecayTree &A)
bool equalBySVPAT_LRec(const DecayTree &A, const DecayTree &B)
bool operator()(MINT::const_counted_ptr< DecayTree > a, MINT::const_counted_ptr< DecayTree > b) const
bool operator()(MINT::const_counted_ptr< DecayTree > a, MINT::const_counted_ptr< DecayTree > b) const