42 #include "reportingUtilsRoot.hpp"
43 #include "spinUtils.hpp"
51 bool isobarDecayVertex::_debug =
false;
54 isobarDecayVertex::isobarDecayVertex(
const particlePtr& parent,
66 printErr <<
"null pointer to parent particle. aborting." << endl;
70 printErr <<
"null pointer to daughter 1 particle. aborting." << endl;
74 printErr <<
"null pointer to daughter 2 particle. aborting." << endl;
83 printWarn <<
"null pointer to mass dependence. setting " << *_massDep << endl;
86 printDebug <<
"constructed " << *
this << endl;
115 const bool cloneOutParticles)
const
118 if (cloneInParticles)
120 if (cloneOutParticles)
123 printDebug <<
"cloned " << *
this <<
"; " <<
this <<
" -> " << vertexClone <<
" "
125 << ((
cloneOutParticles) ?
"in" :
"ex") <<
"cluding outgoing particles" << std::endl;
138 if ( (
L() != isoVert->L())
139 or (
S() != isoVert->S())
150 printWarn <<
"cannot add incoming particle to " << *
this << endl;
159 printWarn <<
"cannot add outgoing particle to " << *
this << endl;
164 const TLorentzVector&
168 printDebug <<
"calculating Lorentz-vector of parent particle " <<
parent()->name()
169 <<
" before = " <<
parent()->lzVec() <<
" GeV, " << flush;
172 cout <<
"after = " <<
parent()->lzVec() <<
" GeV" << endl;
181 printDebug <<
"calculating charge of parent particle " <<
parent()->name()
182 <<
" before = " <<
parent()->charge() <<
", " << flush;
185 cout <<
"after = " <<
parent()->charge() << endl;
186 return parent()->charge();
194 printDebug <<
"calculating baryon number of parent particle " <<
parent()->name()
195 <<
" before = " <<
parent()->baryonNmb() <<
", " << flush;
198 cout <<
"after = " <<
parent()->baryonNmb() << endl;
199 return parent()->baryonNmb();
207 const string& qnName)
209 if (mQn == d1Qn * d2Qn) {
211 printDebug <<
"success: " << *
this <<
": "
212 << ((qnName ==
"") ?
"multiplicative quantum number" : qnName)
213 <<
" is consistent" << endl;
216 printWarn << ((qnName ==
"") ?
"multiplicative quantum number" : qnName) <<
" mismatch: "
217 <<
parent()->name() <<
" = " << mQn <<
" != " << d1Qn * d2Qn <<
" = "
218 <<
"(" <<
daughter1()->name() <<
" = " << d1Qn <<
") * "
219 <<
"(" <<
daughter2()->name() <<
" = " << d2Qn <<
")" << endl;
229 const string& qnName)
231 if (mQn == d1Qn + d2Qn) {
233 printDebug <<
"success: " << *
this <<
": "
234 << ((qnName ==
"") ?
"additive quantum number" : qnName)
235 <<
" is consistent" << endl;
238 printWarn << ((qnName ==
"") ?
"additive quantum number" : qnName) <<
" mismatch: "
239 <<
parent()->name() <<
" = " << mQn <<
" != " << d1Qn + d2Qn <<
" = "
240 <<
"(" <<
daughter1()->name() <<
" = " << d1Qn <<
") + "
241 <<
"(" <<
daughter2()->name() <<
" = " << d2Qn <<
")" << endl;
250 bool vertexConsistent =
true;
254 vertexConsistent =
false;
256 const int angMomParity = (
_L % 4 == 0) ? 1 : -1;
258 printWarn <<
"parity mismatch: "
263 <<
"(ang. momentum = " << angMomParity <<
")" << endl;
264 vertexConsistent =
false;
266 printDebug <<
"success: " << *
this <<
": parity is consistent" << endl;
271 vertexConsistent =
false;
275 vertexConsistent =
false;
278 daughter2()->strangeness(),
"strangeness"))
279 vertexConsistent =
false;
283 vertexConsistent =
false;
287 vertexConsistent =
false;
289 if (not isEven(
_L)) {
290 printWarn <<
"relative orbital angular momentum L = " << spinQn(
_L)
291 <<
" is not an integer" << endl;
292 vertexConsistent =
false;
294 printDebug <<
"success: " << *
this
295 <<
": relative orbital angular momentum L = " << spinQn(
_L) <<
" is integer" << endl;
298 printWarn <<
"spins "
301 <<
"cannot couple to total spin S = " << spinQn(
_S) << endl;
302 vertexConsistent =
false;
304 printDebug <<
"success: " << *
this <<
": spin-spin coupling is consistent" << endl;
306 if (not spinStatesCanCouple(
_L,
_S,
parent()->J())) {
307 printWarn <<
"orbital angular momentum L = " << spinQn(
_L) <<
" and spin S = " << spinQn(
_S)
308 <<
" cannot couple to angular momentum J = " << spinQn(
parent()->J()) << endl;
309 vertexConsistent =
false;
311 printDebug <<
"success: " << *
this <<
": L-S coupling is consistent" << endl;
316 printWarn <<
"isospin Clebsch-Gordan "
317 <<
"(" << spinQn(
daughter1()->isospin()) <<
", " << spinQn(
daughter1()->isospinProj())
318 <<
"; " << spinQn(
daughter2()->isospin()) <<
", " << spinQn(
daughter2()->isospinProj())
319 <<
" | " << spinQn(
parent ()->isospin()) <<
", " << spinQn(
parent ()->isospinProj())
321 vertexConsistent =
false;
323 printDebug << *
this <<
": isospin Clebsch-Gordan is not zero" << endl;
333 or ( (
parent ()->charge() == 0)
335 or ( (
parent ()->charge() != 0)
336 and (
parent ()->C() != 0))) {
337 printWarn <<
"C-, G-parity, and isospin are inconsistent "
339 <<
parent ()->qnSummary() << endl;
340 vertexConsistent =
false;
342 printDebug << *
this <<
": C-, G-parity, and isospin are consistent" << endl;
345 if (vertexConsistent) {
347 printDebug <<
"data for " << *
this <<
" are consistent: " << endl;
349 printWarn <<
"data for " << *
this <<
" are inconsistent (see warnings above)" << endl;
350 return vertexConsistent;
357 out <<
name() <<
": "
360 <<
" [L = " << spinQn(
_L) <<
", S = " << spinQn(
_S) <<
"] "
369 out <<
name() <<
":" << endl
370 <<
" parent: " << *
parent() << endl
371 <<
" daughter 1: " << *
daughter1() << endl
372 <<
" daughter 2: " << *
daughter2() << endl
373 <<
" L = " << spinQn(
_L) <<
", S = " << spinQn(
_S) << endl
382 out <<
name() <<
" " <<
this <<
": "
383 <<
"parent particle: " <<
parent() <<
"; "
384 <<
"daughter 1 particle: " <<
daughter1() <<
"; "
385 <<
"daughter 2 particle: " <<
daughter2() << endl;