#include <EvtDalitzPlot.hh>
Public Member Functions | |
double | bigM () const |
const EvtDalitzPlot * | clone () const |
double | cosTh (EvtCyclic3::Pair i1, double q1, EvtCyclic3::Pair i2, double q2) const |
double | e (EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const |
EvtDalitzPlot (const EvtDalitzPlot &other) | |
EvtDalitzPlot (const EvtDecayMode &mode, double ldel=0., double rdel=0.) | |
EvtDalitzPlot (double mA, double mB, double mC, double bigM, double ldel=0., double rdel=0.) | |
EvtDalitzPlot () | |
bool | fuzzy () const |
double | getArea (int N=1000, EvtCyclic3::Pair i=EvtCyclic3::AB, EvtCyclic3::Pair j=EvtCyclic3::BC) const |
double | jacobian (EvtCyclic3::Pair i, double q) const |
double | m (EvtCyclic3::Index i) const |
double | mA () const |
double | mAbsMax (EvtCyclic3::Pair i) const |
double | mAbsMin (EvtCyclic3::Pair i) const |
double | mB () const |
double | mC () const |
bool | operator== (const EvtDalitzPlot &other) const |
double | p (EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const |
void | print () const |
double | q (EvtCyclic3::Pair i1, double cosTh, EvtCyclic3::Pair i2, double q2) const |
double | qAbsMax (EvtCyclic3::Pair i) const |
double | qAbsMin (EvtCyclic3::Pair i) const |
double | qHelAbsMax (EvtCyclic3::Pair i) const |
double | qHelAbsMin (EvtCyclic3::Pair i) const |
double | qMax (EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const |
double | qMin (EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const |
double | qResAbsMax (EvtCyclic3::Pair i) const |
double | qResAbsMin (EvtCyclic3::Pair i) const |
double | qSumMax () const |
double | qSumMin () const |
void | sanityCheck () const |
double | sum () const |
EvtTwoBodyVertex | vB (EvtCyclic3::Pair iRes, double m0, int L) const |
EvtTwoBodyVertex | vD (EvtCyclic3::Pair iRes, double m0, int L) const |
~EvtDalitzPlot () | |
Protected Attributes | |
double | _bigM |
double | _ldel |
double | _mA |
double | _mB |
double | _mC |
double | _rdel |
|
|
|
00041 : _mA(mA), _mB(mB), _mC(mC), _bigM(bigM), 00042 _ldel(ldel), _rdel(rdel) 00043 { 00044 sanityCheck(); 00045 }
|
|
00048 { 00049 _mA = EvtPDL::getMeanMass(EvtPDL::getId(mode.dau(A))); 00050 _mB = EvtPDL::getMeanMass(EvtPDL::getId(mode.dau(B))); 00051 _mC = EvtPDL::getMeanMass(EvtPDL::getId(mode.dau(C))); 00052 _bigM = EvtPDL::getMeanMass(EvtPDL::getId(mode.mother())); 00053 00054 _ldel = ldel; 00055 _rdel = rdel; 00056 00057 sanityCheck(); 00058 }
|
|
00062 : _mA(other._mA), _mB(other._mB), _mC(other._mC), _bigM(other._bigM), 00063 _ldel(other._ldel), _rdel(other._rdel) 00064 {}
|
|
00068 {}
|
|
00092 { return _bigM; }
|
|
00084 { 00085 return new EvtDalitzPlot(*this); 00086 }
|
|
00261 { 00262 if(i1 == i2) return 1.; 00263 00264 double qmax = qMax(i1,i2,q2); 00265 double qmin = qMin(i1,i2,q2); 00266 00267 double cos = (qmax + qmin - 2*q1)/(qmax - qmin); 00268 00269 return cos; 00270 }
|
|
00274 { 00275 if(i == other(j)) { 00276 00277 // i does not belong to pair j 00278 00279 return (bigM()*bigM()-q-m(i)*m(i))/2/sqrt(q); 00280 } 00281 else { 00282 00283 // i and k make pair j 00284 00285 Index k; 00286 if(first(j) == i) k = second(j); 00287 else k = first(j); 00288 00289 double e = (q + m(i)*m(i) - m(k)*m(k))/2/sqrt(q); 00290 return e; 00291 } 00292 }
|
|
|
|
00241 { 00242 // Trapezoidal integral over qi. qj can be calculated. 00243 // The first and the last point are zero, so they are not counted 00244 00245 double dh = (qAbsMax(i) - qAbsMin(i))/((double) N); 00246 double sum = 0; 00247 00248 int ii; 00249 for(ii=1;ii<N;ii++) { 00250 00251 double x = qAbsMin(i) + ii*dh; 00252 double dy = qMax(j,i,x) - qMin(j,i,x); 00253 sum += dy; 00254 } 00255 00256 return sum * dh; 00257 }
|
|
|
|
00101 { 00102 00103 double m = _mA; 00104 if(i == B) m = _mB; 00105 else 00106 if(i == C) m = _mC; 00107 00108 return m; 00109 }
|
|
00093 { return _mA; }
|
|
00166 { 00167 return sqrt(qAbsMax(i)); 00168 }
|
|
00160 { 00161 return sqrt(qAbsMin(i)); 00162 }
|
|
00094 { return _mB; }
|
|
00095 { return _mC; }
|
|
00072 { 00073 bool ret = false; 00074 if(_mA == other._mA && 00075 _mB == other._mB && 00076 _mC == other._mC && 00077 _bigM == other._bigM) ret = true; 00078 00079 return ret; 00080 }
|
|
00296 { 00297 double en = e(i,j,q); 00298 double p2 = en*en - m(i)*m(i); 00299 00300 if(p2 < 0) { 00301 printf("Bad value of p2 %f %d %d %f %f\n",p2,i,j,en,m(i)); 00302 assert(0); 00303 } 00304 00305 return sqrt(p2); 00306 }
|
|
00339 { 00340 // masses 00341 printf("Mass M %f\n",bigM()); 00342 printf("Mass mA %f\n",_mA); 00343 printf("Mass mB %f\n",_mB); 00344 printf("Mass mC %f\n",_mC); 00345 // limits 00346 printf("Limits qAB %f : %f\n",qAbsMin(AB),qAbsMax(AB)); 00347 printf("Limits qBC %f : %f\n",qAbsMin(BC),qAbsMax(BC)); 00348 printf("Limits qCA %f : %f\n",qAbsMin(CA),qAbsMax(CA)); 00349 printf("Sum q %f\n",sum()); 00350 printf("Limit qsum %f : %f\n",qSumMin(),qSumMax()); 00351 }
|
|
00310 { 00311 if(i1 == i2) return q2; 00312 00313 EvtCyclic3::Index f = first(i1); 00314 EvtCyclic3::Index s = second(i1); 00315 return m(f)*m(f) + m(s)*m(s) + 2*e(f,i2,q2)*e(s,i2,q2) - 2*p(f,i2,q2)*p(s,i2,q2)*cosTh; 00316 }
|
|
|
|
00119 { 00120 Index j = first(i); 00121 Index k = second(i); 00122 00123 return (m(j) + m(k))*(m(j) + m(k)); 00124 }
|
|
00152 { 00153 Pair j = next(i); 00154 Pair k = prev(i); 00155 return (qAbsMax(j) - qAbsMin(k))/2.; 00156 }
|
|
00145 { 00146 Pair j = next(i); 00147 Pair k = prev(i); 00148 return (qAbsMin(j) - qAbsMax(k))/2.; 00149 }
|
|
00209 { 00210 00211 if(i == j) return q; 00212 else { 00213 00214 // Particle pair j defines the rest-frame 00215 // 0 - particle common to r.f. and angle calculations 00216 // 1 - particle belonging to r.f. but not angle 00217 // 2 - particle not belonging to r.f. 00218 00219 Index k0 = common(i,j); 00220 Index k2 = other(j); 00221 Index k1 = other(k0,k2); 00222 00223 // Energy, momentum of particle common to rest-frame and angle 00224 EvtTwoBodyKine jpair(m(k0),m(k1),sqrt(q)); 00225 double ek = jpair.e(EvtTwoBodyKine::A,EvtTwoBodyKine::AB); 00226 double pk = jpair.p(); 00227 00228 // Energy and momentum of the other particle 00229 EvtTwoBodyKine mother(sqrt(q),m(k2),bigM()); 00230 double ej = mother.e(EvtTwoBodyKine::B,EvtTwoBodyKine::A); 00231 double pj = mother.p(EvtTwoBodyKine::A); 00232 00233 00234 // See PDG 34.4.3.1 00235 return (ek+ej)*(ek+ej) - (pk-pj)*(pk-pj); 00236 } 00237 }
|
|
00174 { 00175 if(i == j) return q; 00176 00177 else { 00178 00179 // Particle pair j defines the rest-frame 00180 // 0 - particle common to r.f. and angle calculations 00181 // 1 - particle belonging to r.f. but not angle 00182 // 2 - particle not belonging to r.f. 00183 00184 Index k0 = common(i,j); 00185 Index k2 = other(j); 00186 Index k1 = other(k0,k2); 00187 00188 // Energy, momentum of particle common to rest-frame and angle 00189 EvtTwoBodyKine jpair(m(k0),m(k1),sqrt(q)); 00190 double pk = jpair.p(); 00191 double ek = jpair.e(EvtTwoBodyKine::A,EvtTwoBodyKine::AB); 00192 00193 00194 // Energy and momentum of the other particle 00195 EvtTwoBodyKine mother(sqrt(q),m(k2),bigM()); 00196 double ej = mother.e(EvtTwoBodyKine::B,EvtTwoBodyKine::A); 00197 double pj = mother.p(EvtTwoBodyKine::A); 00198 00199 00200 // See PDG 34.4.3.1 00201 return (ek+ej)*(ek+ej) - (pk+pj)*(pk+pj); 00202 } 00203 }
|
|
|
|
|
|
00054 { return sum() + _rdel; }
|
|
00053 { return sum() + _ldel; }
|
|
00090 { 00091 if(_mA < 0 || _mB < 0 || _mC < 0 || _bigM <= 0 || _bigM - _mA - _mB - _mC < 0.) { 00092 00093 printf("Invalid Dalitz plot %f %f %f %f\n",_mA,_mB,_mC,_bigM); 00094 assert(0); 00095 } 00096 assert(_ldel <= 0.); 00097 assert(_rdel >= 0.); 00098 }
|
|
|
|
00333 { 00334 return EvtTwoBodyVertex(m0,m(other(iRes)),bigM(),L); 00335 }
|
|
00326 { 00327 return EvtTwoBodyVertex(m(first(iRes)), 00328 m(second(iRes)),m0,L); 00329 }
|
|
|
|
|
|
|
|
|
|
|
|
|