290 MsgStream log(
msgSvc(), name() );
292 log << MSG::INFO <<
"in initialize()" << endmsg;
295 IPartPropSvc* p_PartPropSvc;
296 static const bool CREATEIFNOTTHERE(
true );
297 StatusCode PartPropStatus = service(
"PartPropSvc", p_PartPropSvc, CREATEIFNOTTHERE );
298 if ( !PartPropStatus.isSuccess() || 0 == p_PartPropSvc )
300 log << MSG::ERROR <<
" Could not initialize Particle Properties Service" << endmsg;
301 return PartPropStatus;
303 m_particleTable = p_PartPropSvc->PDT();
316 double rCF_0 = m_rCF_0;
317 double dCF_0 = m_dCF_0;
318 double RCF_0 = m_RCF_0;
320 double zCF_0 = 2 *
cos( dCF_0 );
321 double rCF2_0 = rCF_0 * rCF_0;
322 double zCF2_0 = zCF_0 * zCF_0;
323 double rCF_1 = m_rCF_1;
324 double dCF_1 = m_dCF_1;
325 double RCF_1 = m_RCF_1;
327 double zCF_1 = 2 *
cos( dCF_1 );
328 double rCF2_1 = rCF_1 * rCF_1;
329 double zCF2_1 = zCF_1 * zCF_1;
330 double rCF_3 = m_rCF_3;
331 double dCF_3 = m_dCF_3;
332 double RCF_3 = m_RCF_3;
334 double zCF_3 = 2 *
cos( dCF_3 );
335 double rCF2_3 = rCF_3 * rCF_3;
336 double zCF2_3 = zCF_3 * zCF_3;
339 double rCS2 = rCS * rCS;
340 double zCS2 = zCS * zCS;
342 double rmix = ( x * x + y * y ) / 2.;
343 double wCF_0 = 2 *
cos( dCF_0 );
344 double wCF_1 = 2 *
cos( dCF_1 );
345 double wCF_3 = 2 *
cos( dCF_3 );
346 double wCS = ( m_wCSSign ? 1. : -1. ) * sqrt( 4. - zCS2 );
347 double vCF_0CSPlus = ( zCF_0 * zCS + wCF_0 * wCS ) / 2.;
348 double vCF_1CSPlus = ( zCF_1 * zCS + wCF_1 * wCS ) / 2.;
349 double vCF_3CSPlus = ( zCF_3 * zCS + wCF_3 * wCS ) / 2.;
350 double vCF_0CSMinus = ( zCF_0 * zCS - wCF_0 * wCS ) / 2.;
351 double vCF_1CSMinus = ( zCF_1 * zCS - wCF_1 * wCS ) / 2.;
352 double vCF_3CSMinus = ( zCF_3 * zCS - wCF_3 * wCS ) / 2.;
354 m_deltaCF_0 = acos( zCF_0 / 2. ) * ( m_wCFSign_0 ? 1. : -1. );
355 m_deltaCF_1 = acos( zCF_1 / 2. ) * ( m_wCFSign_1 ? 1. : -1. );
356 m_deltaCF_3 = acos( zCF_3 / 2. ) * ( m_wCFSign_3 ? 1. : -1. );
357 m_deltaCS = acos( zCS / 2. ) * ( m_wCSSign ? 1. : -1. );
361 double rCF2 = rCF * rCF;
362 double zCF2 = zCF * zCF;
363 double wCF = ( m_wCFSign ? 1. : -1. ) * sqrt( 4. - zCF2 );
364 double vCFCSPlus = ( zCF * zCS + wCF * wCS ) / 2.;
365 double vCFCSMinus = ( zCF * zCS - wCF * wCS ) / 2.;
366 m_deltaCF = acos( zCF / 2. ) * ( m_wCFSign ? 1. : -1. );
368 double bCF_0 = 1. + 0.5 * rCF_0 * ( zCF_0 * y + wCF_0 * x ) +
369 0.5 * ( y * y - x * x );
370 double bCF_1 = 1. + 0.5 * rCF_1 * ( zCF_1 * y + wCF_1 * x ) +
371 0.5 * ( y * y - x * x );
372 double bCF_3 = 1. + 0.5 * rCF_3 * ( zCF_3 * y + wCF_3 * x ) +
373 0.5 * ( y * y - x * x );
374 double bCS = 1. + 0.5 * rCS * ( zCS * y + wCS * x ) + 0.5 * ( y * y - x * x );
375 double bCPPlus = 1. - y;
376 double bCPMinus = 1. + y;
378 double bCPPlus_PiPiPi0 = 1. - ( 2. * m_FCP_PiPiPi0 - 1. ) * y;
380 if ( !m_useNewWeights )
394 m_rwsCF_0 = ( rCF2_0 + 0.5 * rCF_0 * ( zCF_0 * y - wCF_0 * x ) + rmix ) /
396 m_rwsCF_1 = ( rCF2_1 + 0.5 * rCF_1 * ( zCF_1 * y - wCF_1 * x ) + rmix ) /
398 m_rwsCF_3 = ( rCF2_3 + 0.5 * rCF_3 * ( zCF_3 * y - wCF_3 * x ) + rmix ) /
400 m_rwsCS = ( rCS2 + 0.5 * rCS * ( zCS * y - wCS * x ) + rmix ) / bCS;
402 double bfCF_0 = ( 1. - RCF_0 * rCF_0 * ( 0.5 * zCF_0 * y + 0.5 * wCF_0 * x ) +
403 0.5 * ( -1 * x * x + y * y ) );
404 double bfCF_1 = ( 1. - RCF_1 * rCF_1 * ( 0.5 * zCF_1 * y + 0.5 * wCF_1 * x ) +
405 0.5 * ( -1 * x * x + y * y ) );
406 double bfCF_3 = ( 1. - RCF_3 * rCF_3 * ( 0.5 * zCF_3 * y + 0.5 * wCF_3 * x ) +
407 0.5 * ( -1 * x * x + y * y ) );
408 double bfCFbar_0 = ( rCF2_0 - RCF_0 * rCF_0 * ( 0.5 * zCF_0 * y - 0.5 * wCF_0 * x ) +
409 0.5 * ( x * x + y * y ) );
410 double bfCFbar_1 = ( rCF2_1 - RCF_1 * rCF_1 * ( 0.5 * zCF_1 * y - 0.5 * wCF_1 * x ) +
411 0.5 * ( x * x + y * y ) );
412 double bfCFbar_3 = ( rCF2_3 - RCF_3 * rCF_3 * ( 0.5 * zCF_3 * y - 0.5 * wCF_3 * x ) +
413 0.5 * ( x * x + y * y ) );
437 m_weights[kFlavoredCF_0][kFlavoredCF_0] =
438 ( ( 1 - RCF_0 * RCF_0 ) /
439 ( 1 - RCF_0 * ( 1. / rCF_0 ) * ( 0.5 * zCF_0 * y - 0.5 * wCF_0 * x ) +
440 rmix / ( 2 * rCF2_0 ) ) );
441 m_weights[kFlavoredCF_0][kFlavoredCFBar_0] =
442 ( 1. + rCF2_0 * rCF2_0 - 2. * RCF_0 * RCF_0 * rCF2_0 ) / ( bfCF_0 * bfCF_0 );
443 m_weights[kFlavoredCF_0][kFlavoredCF_1] =
444 ( 1. + ( rCF2_0 / rCF2_1 ) * ( rCF2_0 / rCF2_1 ) -
445 2. * ( rCF2_0 / rCF2_1 ) * RCF_0 * RCF_1 *
cos( dCF_0 - dCF_1 ) ) /
446 ( 1. + ( rCF2_0 / rCF2_1 ) * ( rCF2_0 / rCF2_1 ) -
447 RCF_1 * ( 1. / rCF_1 ) * ( 0.5 * zCF_1 * y - 0.5 * wCF_1 * x ) -
448 ( RCF_0 * rCF_1 / ( rCF_0 * rCF_0 ) ) * ( 0.5 * zCF_0 * y - 0.5 * wCF_0 * x ) +
449 rmix / ( rCF_0 * rCF_0 ) );
450 cout << ( 1. + ( rCF2_0 / rCF2_1 ) * ( rCF2_0 / rCF2_1 ) -
451 RCF_1 * ( 1. / rCF_1 ) * ( 0.5 * zCF_1 * y - 0.5 * wCF_1 * x ) -
452 ( RCF_0 * rCF_1 / ( rCF_0 * rCF_0 ) ) * ( 0.5 * zCF_0 * y - 0.5 * wCF_0 * x ) +
453 rmix / ( rCF_0 * rCF_0 ) )
455 m_weights[kFlavoredCF_0][kFlavoredCFBar_1] =
456 ( 1. + rCF2_0 * rCF2_1 - 2. * RCF_0 * RCF_1 * rCF_0 * rCF_1 ) / ( bfCF_0 * bfCF_1 );
457 m_weights[kFlavoredCF_0][kFlavoredCF_3] =
458 ( 1. + ( rCF2_0 / rCF2_3 ) * ( rCF2_0 / rCF2_3 ) -
459 2. * ( rCF2_0 / rCF2_3 ) * RCF_0 * RCF_3 *
cos( dCF_0 - dCF_3 ) ) /
460 ( 1. + ( rCF2_0 / rCF2_3 ) * ( rCF2_0 / rCF2_3 ) -
461 RCF_3 * ( 1. / rCF_3 ) * ( 0.5 * zCF_3 * y - 0.5 * wCF_3 * x ) -
462 ( RCF_0 / ( rCF_0 * rCF_0 ) ) * ( 0.5 * zCF_0 * y - 0.5 * wCF_0 * x ) +
463 rmix / ( rCF_0 * rCF_0 ) );
464 m_weights[kFlavoredCF_0][kFlavoredCFBar_3] =
465 ( 1. + rCF2_0 * rCF2_3 - 2. * RCF_0 * RCF_3 * rCF_0 * rCF_3 ) / ( bfCF_0 * bfCF_3 );
466 m_weights[kFlavoredCF_0][kFlavoredCSBar] = 1. + rCF2_0 * rCS2 - rCF_0 * rCS * vCFCSMinus;
467 m_weights[kFlavoredCF_0][kFlavoredCS] = rCF2_0 + rCS2 - rCF_0 * rCS * vCF_0CSPlus +
468 rmix *
m_weights[kFlavoredCF_0][kFlavoredCSBar];
470 m_weights[kFlavoredCF_0][kSLPlus] = 1. / bfCF_0;
471 m_weights[kFlavoredCF_0][kSLMinus] = 1. / bfCF_0;
478 ( 1. + rCF2_0 - 2. * rCF_0 * RCF_0 *
cos( dCF_0 ) ) /
479 ( ( 1. + rCF2_0 - 2. * rCF_0 * RCF_0 *
cos( dCF_0 ) * y + y * y ) * bCPPlus );
481 ( 1. + rCF2_0 + 2. * rCF_0 * RCF_0 *
cos( dCF_0 ) ) /
482 ( ( 1. + rCF2_0 - 2. * rCF_0 * RCF_0 *
cos( dCF_0 ) * y + y * y ) * bCPMinus );
483 m_weights[kFlavoredCF_0][kDalitz] = 1. / bfCF_0;
484 m_weights[kFlavoredCF_0][k2Pip2Pim] = 1. / bfCF_0;
485 m_weights[kFlavoredCF_0][kPipPim2Pi0] = 1. / bfCF_0;
486 m_weights[kFlavoredCF_0][kK0PiPiPi0] = 1. / bfCF_0;
487 m_weights[kFlavoredCF_0][kKKPiPi] = 1. / bfCF_0;
488 m_weights[kFlavoredCF_0][kK0KK] = 1. / bfCF_0;
490 ( 1. + rCF2_0 - 2. * ( 2. * m_FCP_PiPiPi0 - 1. ) * rCF_0 * RCF_0 *
cos( dCF_0 ) ) /
491 ( ( 1. + rCF2_0 - 2. * rCF_0 * RCF_0 *
cos( dCF_0 ) * y + y * y ) * bCPPlus_PiPiPi0 );
494 m_weights[kFlavoredCFBar_0][kFlavoredCFBar_0] =
m_weights[kFlavoredCF_0][kFlavoredCF_0];
495 m_weights[kFlavoredCFBar_0][kFlavoredCF_1] =
m_weights[kFlavoredCF_0][kFlavoredCFBar_1];
496 m_weights[kFlavoredCFBar_0][kFlavoredCFBar_1] =
m_weights[kFlavoredCF_0][kFlavoredCF_1];
497 m_weights[kFlavoredCFBar_0][kFlavoredCF_3] =
m_weights[kFlavoredCF_0][kFlavoredCFBar_3];
498 m_weights[kFlavoredCFBar_0][kFlavoredCFBar_3] =
m_weights[kFlavoredCF_0][kFlavoredCF_3];
501 m_weights[kFlavoredCFBar_0][kSLPlus] = 1. / bCF_0;
502 m_weights[kFlavoredCFBar_0][kSLMinus] = 1. / bCF_0;
505 m_weights[kFlavoredCFBar_0][kDalitz] = 1. / bCF_0;
506 m_weights[kFlavoredCFBar_0][k2Pip2Pim] = 1. / bCF_0;
507 m_weights[kFlavoredCFBar_0][kPipPim2Pi0] = 1. / bCF_0;
508 m_weights[kFlavoredCFBar_0][kK0PiPiPi0] = 1. / bCF_0;
509 m_weights[kFlavoredCFBar_0][kKKPiPi] = 1. / bCF_0;
510 m_weights[kFlavoredCFBar_0][kK0KK] = 1. / bCF_0;
513 m_weights[kFlavoredCF_1][kFlavoredCF_1] =
514 ( ( 1 - RCF_1 * RCF_1 ) /
515 ( 1 - RCF_1 * ( 1. / rCF_1 ) * ( 0.5 * zCF_1 * y - 0.5 * wCF_1 * x ) +
516 rmix / ( 2 * rCF2_1 ) ) );
517 m_weights[kFlavoredCF_1][kFlavoredCFBar_1] =
518 ( 1. + rCF2_1 * rCF2_1 - 2. * RCF_1 * RCF_1 * rCF2_1 ) / ( bfCF_1 * bfCF_1 );
519 m_weights[kFlavoredCF_1][kFlavoredCF_3] =
520 ( 1. + ( rCF2_1 / rCF2_3 ) * ( rCF2_1 / rCF2_3 ) -
521 2. * ( rCF2_1 / rCF2_3 ) * RCF_1 * RCF_3 *
cos( dCF_1 - dCF_3 ) ) /
522 ( 1. + ( rCF2_1 / rCF2_3 ) * ( rCF2_1 / rCF2_3 ) -
523 RCF_3 * ( 1. / rCF_3 ) * ( 0.5 * zCF_3 * y - 0.5 * wCF_3 * x ) -
524 ( RCF_1 / ( rCF_1 * rCF_1 ) ) * ( 0.5 * zCF_1 * y - 0.5 * wCF_1 * x ) +
525 rmix / ( rCF_1 * rCF_1 ) );
527 m_weights[kFlavoredCF_1][kFlavoredCFBar_3] =
528 ( 1. + rCF2_1 * rCF2_3 - 2. * RCF_1 * RCF_3 * rCF_1 * rCF_3 ) / ( bfCF_1 * bfCF_3 );
530 m_weights[kFlavoredCF_1][kFlavoredCSBar] = 1. + rCF2_1 * rCS2 - rCF_1 * rCS * vCFCSMinus;
531 m_weights[kFlavoredCF_1][kFlavoredCS] = rCF2_1 + rCS2 - rCF_1 * rCS * vCF_1CSPlus +
532 rmix *
m_weights[kFlavoredCF_1][kFlavoredCSBar];
534 m_weights[kFlavoredCF_1][kSLPlus] = 1. / bfCF_1;
535 m_weights[kFlavoredCF_1][kSLMinus] = 1. / bfCF_1;
542 ( 1. + rCF2_1 - 2. * rCF_1 * RCF_1 *
cos( dCF_1 ) ) /
543 ( ( 1. + rCF2_1 - 2. * rCF_1 * RCF_1 *
cos( dCF_1 ) * y + y * y ) * bCPPlus );
545 ( 1. + rCF2_1 + 2. * rCF_1 * RCF_1 *
cos( dCF_1 ) ) /
546 ( ( 1. + rCF2_1 - 2. * rCF_1 * RCF_1 *
cos( dCF_1 ) * y + y * y ) * bCPMinus );
547 m_weights[kFlavoredCF_1][kDalitz] = 1. / bCF_1;
548 m_weights[kFlavoredCF_1][k2Pip2Pim] = 1. / bCF_1;
549 m_weights[kFlavoredCF_1][kPipPim2Pi0] = 1. / bCF_1;
550 m_weights[kFlavoredCF_1][kK0PiPiPi0] = 1. / bCF_1;
551 m_weights[kFlavoredCF_1][kKKPiPi] = 1. / bCF_1;
552 m_weights[kFlavoredCF_1][kK0KK] = 1. / bCF_1;
554 ( 1. + rCF2_1 - 2. * ( 2. * m_FCP_PiPiPi0 - 1. ) * rCF_1 * RCF_1 *
cos( dCF_1 ) ) /
555 ( ( 1. + rCF2_1 - 2. * rCF_1 * RCF_1 *
cos( dCF_1 ) * y + y * y ) * bCPPlus_PiPiPi0 );
558 m_weights[kFlavoredCFBar_1][kFlavoredCFBar_1] =
m_weights[kFlavoredCF_1][kFlavoredCF_1];
559 m_weights[kFlavoredCFBar_1][kFlavoredCF_3] =
m_weights[kFlavoredCF_1][kFlavoredCFBar_3];
560 m_weights[kFlavoredCFBar_1][kFlavoredCFBar_3] =
m_weights[kFlavoredCF_1][kFlavoredCF_3];
563 m_weights[kFlavoredCFBar_1][kSLPlus] = 1. / bCF_1;
564 m_weights[kFlavoredCFBar_1][kSLMinus] = 1. / bCF_1;
567 m_weights[kFlavoredCFBar_1][kDalitz] = 1. / bCF_1;
568 m_weights[kFlavoredCFBar_1][k2Pip2Pim] = 1. / bCF_1;
569 m_weights[kFlavoredCFBar_1][kPipPim2Pi0] = 1. / bCF_1;
570 m_weights[kFlavoredCFBar_1][kK0PiPiPi0] = 1. / bCF_1;
571 m_weights[kFlavoredCFBar_1][kKKPiPi] = 1. / bCF_1;
572 m_weights[kFlavoredCFBar_1][kK0KK] = 1. / bCF_1;
575 m_weights[kFlavoredCF_3][kFlavoredCF_3] =
576 ( ( 1 - RCF_3 * RCF_3 ) /
577 ( 1 - RCF_3 * ( 1. / rCF_3 ) * ( 0.5 * zCF_3 * y - 0.5 * wCF_3 * x ) +
578 rmix / ( 2 * rCF2_3 ) ) );
579 m_weights[kFlavoredCF_3][kFlavoredCFBar_3] =
580 ( 1. + rCF2_3 * rCF2_3 - 2. * RCF_3 * RCF_3 * rCF2_3 ) / ( bfCF_3 * bfCF_3 );
581 m_weights[kFlavoredCF_3][kFlavoredCSBar] = 1. + rCF2_3 * rCS2 - rCF_3 * rCS * vCFCSMinus;
582 m_weights[kFlavoredCF_3][kFlavoredCS] = rCF2_3 + rCS2 - rCF_3 * rCS * vCF_3CSPlus +
583 rmix *
m_weights[kFlavoredCF_3][kFlavoredCSBar];
585 m_weights[kFlavoredCF_3][kSLPlus] = 1. / bfCF_3;
586 m_weights[kFlavoredCF_3][kSLMinus] = 1. / bfCF_3;
593 ( 1. + rCF2_3 - 2. * rCF_3 * RCF_3 *
cos( dCF_3 ) ) /
594 ( ( 1. + rCF2_3 - 2. * rCF_3 * RCF_3 *
cos( dCF_3 ) * y + y * y ) * bCPPlus );
596 ( 1. + rCF2_3 + 2. * rCF_3 * RCF_3 *
cos( dCF_3 ) ) /
597 ( ( 1. + rCF2_3 - 2. * rCF_3 * RCF_3 *
cos( dCF_3 ) * y + y * y ) * bCPMinus );
598 m_weights[kFlavoredCF_3][kDalitz] = 1. / bCF_3;
599 m_weights[kFlavoredCF_3][k2Pip2Pim] = 1. / bCF_3;
600 m_weights[kFlavoredCF_3][kPipPim2Pi0] = 1. / bCF_3;
601 m_weights[kFlavoredCF_3][kK0PiPiPi0] = 1. / bCF_3;
602 m_weights[kFlavoredCF_3][kKKPiPi] = 1. / bCF_3;
603 m_weights[kFlavoredCF_3][kK0KK] = 1. / bCF_3;
605 ( 1. + rCF2_3 - 2. * ( 2. * m_FCP_PiPiPi0 - 1. ) * rCF_3 * RCF_3 *
cos( dCF_3 ) ) /
606 ( ( 1. + rCF2_3 - 2. * rCF_3 * RCF_3 *
cos( dCF_3 ) * y + y * y ) * bCPPlus_PiPiPi0 );
609 m_weights[kFlavoredCFBar_3][kFlavoredCFBar_3] =
m_weights[kFlavoredCF_3][kFlavoredCF_3];
612 m_weights[kFlavoredCFBar_3][kSLPlus] = 1. / bCF_3;
613 m_weights[kFlavoredCFBar_3][kSLMinus] = 1. / bCF_3;
616 m_weights[kFlavoredCFBar_3][kDalitz] = 1. / bCF_3;
617 m_weights[kFlavoredCFBar_3][k2Pip2Pim] = 1. / bCF_3;
618 m_weights[kFlavoredCFBar_3][kPipPim2Pi0] = 1. / bCF_3;
619 m_weights[kFlavoredCFBar_3][kK0PiPiPi0] = 1. / bCF_3;
620 m_weights[kFlavoredCFBar_3][kKKPiPi] = 1. / bCF_3;
621 m_weights[kFlavoredCFBar_3][kK0KK] = 1. / bCF_3;
627 m_weights[kFlavoredCS][kFlavoredCSBar] = 1. + rCS2 * ( 2. - zCS2 ) + rCS2 * rCS2;
634 m_weights[kFlavoredCS][kSLPlus] = 1. / bCS;
635 m_weights[kFlavoredCS][kSLMinus] = 1. / bCS;
638 ( 1. + rCS2 + rCS * zCS ) / ( 1. +
m_rwsCS ) / bCS / bCPPlus;
640 ( 1. + rCS2 - rCS * zCS ) / ( 1. +
m_rwsCS ) / bCS / bCPMinus;
642 m_weights[kFlavoredCS][kDalitz] = 1. / bCS;
643 m_weights[kFlavoredCS][k2Pip2Pim] = 1. / bCS;
644 m_weights[kFlavoredCS][kPipPim2Pi0] = 1. / bCS;
645 m_weights[kFlavoredCS][kK0PiPiPi0] = 1. / bCS;
646 m_weights[kFlavoredCS][kKKPiPi] = 1. / bCS;
647 m_weights[kFlavoredCS][kK0KK] = 1. / bCS;
649 ( 1. + rCS2 + ( 2. * m_FCP_PiPiPi0 - 1. ) * rCS * zCS ) / ( 1. +
m_rwsCS ) / bCS /
655 m_weights[kFlavoredCSBar][kSLPlus] = 1. / bCS;
656 m_weights[kFlavoredCSBar][kSLMinus] = 1. / bCS;
659 m_weights[kFlavoredCSBar][kDalitz] = 1. / bCS;
660 m_weights[kFlavoredCSBar][k2Pip2Pim] = 1. / bCS;
661 m_weights[kFlavoredCSBar][kPipPim2Pi0] = 1. / bCS;
662 m_weights[kFlavoredCSBar][kK0PiPiPi0] = 1. / bCS;
663 m_weights[kFlavoredCSBar][kKKPiPi] = 1. / bCS;
664 m_weights[kFlavoredCSBar][kK0KK] = 1. / bCS;
673 m_weights[kSLPlus][kCPPlus] = 1. / bCPPlus;
674 m_weights[kSLPlus][kCPMinus] = 1. / bCPMinus;
681 m_weights[kSLPlus][kPipPimPi0] = 1. / bCPPlus_PiPiPi0;
686 m_weights[kSLMinus][kCPPlus] = 1. / bCPPlus;
687 m_weights[kSLMinus][kCPMinus] = 1. / bCPMinus;
694 m_weights[kSLMinus][kPipPimPi0] = 1. / bCPPlus_PiPiPi0;
699 m_weights[kCPPlus][kCPMinus] = 2. / bCPPlus / bCPMinus;
700 m_weights[kCPPlus][kDalitz] = 1. / bCPPlus;
701 m_weights[kCPPlus][k2Pip2Pim] = 1. / bCPPlus;
702 m_weights[kCPPlus][kPipPim2Pi0] = 1. / bCPPlus;
703 m_weights[kCPPlus][kK0PiPiPi0] = 1. / bCPPlus;
704 m_weights[kCPPlus][kKKPiPi] = 1. / bCPPlus;
705 m_weights[kCPPlus][kK0KK] = 1. / bCPPlus;
707 ( 1 - ( 2. * m_FCP_PiPiPi0 - 1. ) ) / bCPPlus / bCPPlus_PiPiPi0;
712 m_weights[kCPMinus][kDalitz] = 1. / bCPMinus;
713 m_weights[kCPMinus][k2Pip2Pim] = 1. / bCPMinus;
714 m_weights[kCPMinus][kPipPim2Pi0] = 1. / bCPMinus;
715 m_weights[kCPMinus][kK0PiPiPi0] = 1. / bCPMinus;
716 m_weights[kCPMinus][kKKPiPi] = 1. / bCPMinus;
717 m_weights[kCPMinus][kK0KK] = 1. / bCPMinus;
719 2. * ( 1 - ( 2. * m_FCP_PiPiPi0 - 1. ) ) / bCPMinus / bCPPlus_PiPiPi0;
756 ( 1 - ( 2. * m_FCP_PiPiPi0 - 1. ) * ( 2. * m_FCP_PiPiPi0 - 1. ) ) / bCPPlus_PiPiPi0 /
759 log << MSG::INFO <<
"Weight matrix" <<
m_weights << endmsg;
762 HepVector fractionsD0( kNDecayTypes + 1, 0 );
763 fractionsD0[kFlavoredCF_0] = 0.305;
764 fractionsD0[kFlavoredCFBar_0] = 0.0076;
765 fractionsD0[kFlavoredCF_1] = 0.144;
766 fractionsD0[kFlavoredCFBar_1] = 0.00031;
767 fractionsD0[kFlavoredCF_3] = 0.0822;
768 fractionsD0[kFlavoredCFBar_3] = 0.00027;
769 fractionsD0[kFlavoredCS] = 0.031;
770 fractionsD0[kFlavoredCSBar] = 0.031;
771 fractionsD0[kSLPlus] = 0.125;
772 fractionsD0[kSLMinus] = 0.;
773 fractionsD0[kCPPlus] = 0.113;
774 fractionsD0[kCPMinus] = 0.102;
775 fractionsD0[kDalitz] = 0.05855;
776 fractionsD0[k2Pip2Pim] = 0.00720;
777 fractionsD0[kPipPim2Pi0] = 0.0102;
778 fractionsD0[kK0PiPiPi0] = 0.105;
779 fractionsD0[kKKPiPi] = 0.00273;
780 fractionsD0[kK0KK] = 0.00902;
781 fractionsD0[kPipPimPi0] = 0.0149;
782 HepVector scales =
m_weights * fractionsD0;
783 log << MSG::INFO <<
"Integrated scale factors " << scales << endmsg;
785 HepVector fractionsD0bar( kNDecayTypes + 1, 0 );
786 fractionsD0bar[kFlavoredCF_0] = 0.0076;
787 fractionsD0bar[kFlavoredCFBar_0] = 0.305;
788 fractionsD0bar[kFlavoredCF_1] = 0.00031;
789 fractionsD0bar[kFlavoredCFBar_1] = 0.144;
790 fractionsD0bar[kFlavoredCF_3] = 0.00027;
791 fractionsD0bar[kFlavoredCFBar_3] = 0.0822;
792 fractionsD0bar[kFlavoredCS] = 0.031;
793 fractionsD0bar[kFlavoredCSBar] = 0.031;
794 fractionsD0bar[kSLPlus] = 0.;
795 fractionsD0bar[kSLMinus] = 0.125;
796 fractionsD0bar[kCPPlus] = 0.113;
797 fractionsD0bar[kCPMinus] = 0.102;
798 fractionsD0bar[kDalitz] = 0.056;
799 fractionsD0bar[k2Pip2Pim] = 0.00720;
800 fractionsD0bar[kPipPim2Pi0] = 0.0102;
801 fractionsD0bar[kK0PiPiPi0] = 0.104;
802 fractionsD0bar[kKKPiPi] = 0.00273;
803 fractionsD0bar[kK0KK] = 0.00902;
804 fractionsD0bar[kPipPimPi0] = 0.0149;
805 HepVector weight_norm = fractionsD0bar.T() * scales;
806 log << MSG::INFO <<
"Overall scale factor " << fractionsD0bar.T() * scales << endmsg;
811 ( fractionsD0bar[kFlavoredCFBar_0] * scales[kFlavoredCFBar_0] ) / weight_norm[0];
813 ( fractionsD0bar[kFlavoredCFBar_1] * scales[kFlavoredCFBar_1] ) / weight_norm[0];
815 ( fractionsD0bar[kFlavoredCFBar_3] * scales[kFlavoredCFBar_3] ) / weight_norm[0];
816 double brCS = ( fractionsD0bar[kFlavoredCS] * scales[kFlavoredCS] +
817 fractionsD0bar[kFlavoredCSBar] * scales[kFlavoredCSBar] ) /
819 double brDCS_0 = ( fractionsD0bar[kFlavoredCF_0] * scales[kFlavoredCF_0] ) / weight_norm[0];
820 double brDCS_1 = ( fractionsD0bar[kFlavoredCF_1] * scales[kFlavoredCF_1] ) / weight_norm[0];
821 double brDCS_3 = ( fractionsD0bar[kFlavoredCF_3] * scales[kFlavoredCF_3] ) / weight_norm[0];
822 double brCPPlus = ( fractionsD0bar[kCPPlus] * scales[kCPPlus] ) / weight_norm[0];
823 double brCPMinus = ( fractionsD0bar[kCPMinus] * scales[kCPMinus] ) / weight_norm[0];
826 double dalitz_y_num = -0.000177536;
827 double dalitz_y_den = -0.0150846;
829 double numFactCF_0 = -rCF_0 * zCF_0 * ( 1. - 0.5 * rCF_0 * wCF_0 * m_x );
830 double numFactCF_1 = -rCF_1 * zCF_1 * ( 1. - 0.5 * rCF_1 * wCF_1 * m_x );
831 double numFactCF_3 = -rCF_3 * zCF_3 * ( 1. - 0.5 * rCF_3 * wCF_3 * m_x );
832 double numFactCS = -rCS * zCS * ( 1. - 0.5 * rCS * wCS * m_x );
833 double denFactCF_0 = 0.5 * rCF2_0 * zCF2_0;
834 double denFactCF_1 = 0.5 * rCF2_1 * zCF2_1;
835 double denFactCF_3 = 0.5 * rCF2_3 * zCF2_3;
836 double denFactCS = 0.5 * rCS2 * zCS2;
838 double num_pre = brCPPlus - brCPMinus + brCF_0 * numFactCF_0 + brCF_1 * numFactCF_1 +
839 brCF_3 * numFactCF_3 + 0.5 * brCS * numFactCS + dalitz_y_num;
840 double den_pre = 1. - brCPPlus - brCPMinus - brCF_0 * denFactCF_0 - brCF_1 * denFactCF_1 -
841 brCF_3 * denFactCF_3 - 0.5 * brCS * denFactCS + dalitz_y_den;
842 double y_pre = num_pre / den_pre;
843 double num = fractionsD0bar[kCPPlus] - fractionsD0bar[kCPMinus] +
844 fractionsD0bar[kFlavoredCFBar_0] * numFactCF_0 +
845 fractionsD0bar[kFlavoredCFBar_1] * numFactCF_1 +
846 fractionsD0bar[kFlavoredCFBar_3] * numFactCF_3 +
847 fractionsD0bar[kFlavoredCS] * numFactCS + dalitz_y_num;
848 double den = 1. - fractionsD0bar[kCPPlus] - fractionsD0bar[kCPMinus] -
849 fractionsD0bar[kFlavoredCFBar_0] * denFactCF_0 -
850 fractionsD0bar[kFlavoredCFBar_1] * denFactCF_1 -
851 fractionsD0bar[kFlavoredCFBar_3] * denFactCF_3 -
852 fractionsD0bar[kFlavoredCS] * denFactCS + dalitz_y_den;
853 double y_prematrix =
num / den;
854 double y_test1 = 0.25 * ( ( ( scales[kCPMinus] *
m_weights[kCPPlus][kSLPlus] ) /
855 ( scales[kCPPlus] *
m_weights[kCPMinus][kSLPlus] ) ) -
856 ( ( scales[kCPPlus] *
m_weights[kCPMinus][kSLPlus] ) /
857 ( scales[kCPMinus] *
m_weights[kCPPlus][kSLPlus] ) ) );
859 log << MSG::INFO <<
"An Input Y of " << m_y << endmsg;
860 log << MSG::INFO <<
"Parent MC has an intrinsic value of y as " << y_prematrix << endmsg;
861 log << MSG::INFO <<
"The BR method predics a y of " << y_pre << endmsg;
862 log << MSG::INFO <<
"The CP-SL double tag method predicts y of " << y_test1 << endmsg;
865 m_largestWeight = 0.;
866 for (
int i = 0; i < kNDecayTypes; ++i )
868 for (
int j = 0; j < kNDecayTypes; ++j )
877 log << MSG::INFO <<
"Renormalized weight matrix " <<
m_weights << endmsg;
881 double D0Sum[10], D0barSum[10];
885 for (
int i = 0; i < 10; ++i )
896 double stepsize = ( m2max - m2min ) / (
double)nsteps;
898 for (
int i = 0; i < nsteps; ++i )
900 double m2i = m2min + ( (double)i + 0.5 ) * stepsize;
902 for (
int j = 0; j < nsteps; ++j )
904 double m2j = m2min + ( (double)j + 0.5 ) * stepsize;
906 if (
t.Point_on_DP( m2i, m2j ) )
908 double m2k = 1.86450 * 1.86450 + 0.497648 * 0.497648 + 0.139570 * 0.139570 +
909 0.139570 * 0.139570 - m2i - m2j;
912 if ( m_dalitzModel == 0 )
914 D0 =
t.CLEO_Amplitude( m2i, m2j, m2k );
915 D0bar =
t.CLEO_Amplitude( m2j, m2i, m2k );
917 if ( m_dalitzModel == 1 )
919 D0 =
t.Babar_Amplitude( m2i, m2j, m2k );
920 D0bar =
t.Babar_Amplitude( m2j, m2i, m2k );
922 if ( m_dalitzModel == 2 )
924 D0 =
t.Amplitude( m2i, m2j, m2k );
925 D0bar =
t.Amplitude( m2j, m2i, m2k );
930 int bin =
t.getBin( m2i, m2j, m2k );
934 D0Sum[
bin] += norm( D0 );
935 D0barSum[
bin] += norm( D0bar );
936 D0D0barSum[
bin] += D0 *
conj( D0bar );
939 D0Sum[9] += norm( D0 );
940 D0barSum[9] += norm( D0bar );
941 D0D0barSum[9] += D0 *
conj( D0bar );
947 for (
int i = 0; i < 10; ++i )
949 double r2 = D0barSum[i] / D0Sum[i];
950 double c =
real( D0D0barSum[i] ) / sqrt( D0barSum[i] ) / sqrt( D0Sum[i] );
951 double s =
imag( D0D0barSum[i] ) / sqrt( D0barSum[i] ) / sqrt( D0Sum[i] );
953 cout <<
"BIN " << i <<
": " << points[i] <<
" pts " << r2 <<
" " << c <<
" " <<
s <<
" "
954 << c * c +
s *
s << endmsg;
957 log << MSG::INFO <<
"successfully return from initialize()" << endmsg;
958 return StatusCode::SUCCESS;
1653 MsgStream log(
msgSvc(), name() );
1654 log << MSG::INFO <<
" In findD0Decay " << endmsg;
1655 vector<double> d0_info( 9 );
1656 for (
int i = 0; i < 9; i++ ) d0_info[i] = 0;
1657 double decay_mode = 20;
1659 double deltaD0 = -1;
1664 for (
int i = 0; i < 26; i++ )
num[i] = 0;
1671 int kNeutralScalar = 5;
1685 int kKStar0Bar = 18;
1688 int kLeptonPlus = 21;
1689 int kLeptonMinus = 22;
1697 int d0_pdg = charm == 1 ? kD0ID : kD0BarID;
1699 HepLorentzVector piPlus, piMinus, k0;
1700 vector<HepLorentzVector> piPlus_4pi, piMinus_4pi, pi0_p4;
1701 vector<HepLorentzVector> kPlus_kkpipi, kMinus_kkpipi;
1703 piMinus_4pi.clear(), pi0_p4.clear();
1704 kPlus_kkpipi.clear();
1705 kMinus_kkpipi.clear();
1707 for ( Event::McParticleCol::iterator it = mcParticles->begin(); it != mcParticles->end();
1710 int pdg_code = ( *it )->particleProperty();
1711 if ( ( *it )->primaryParticle() )
continue;
1719 if ( pdg_code == kKStar0ID || pdg_code == kKStar0BarID || pdg_code == kK0ID ||
1720 pdg_code == kK0BarID || pdg_code == kKDPStar0ID || pdg_code == kKDPStar0BarID ||
1721 pdg_code == kK10ID || pdg_code == kK10BarID || pdg_code == kK0Star0ID ||
1722 pdg_code == kK0Star0BarID || pdg_code == kK0StarPlusID || pdg_code == kK0BarID )
1725 if ( mother_pdg == kK0ID || mother_pdg == kK0BarID )
1731 if ( mother_pdg == kKStar0ID || mother_pdg == kKStar0BarID )
1736 if ( pdg_code == kPiPlusID || pdg_code == kPiMinusID )
continue;
1737 if ( mother_pdg == kKStar0ID && pdg_code == kKPlusID ) pdg_code = kKStar0ID;
1738 if ( mother_pdg == kKStar0BarID && pdg_code == kKMinusID ) pdg_code = kKStar0BarID;
1743 if ( mother_pdg == kK0Star0ID || mother_pdg == kK0Star0BarID )
1749 if ( mother_pdg == kK10ID || mother_pdg == kK10BarID )
1757 if ( mother_pdg == d0_pdg )
1761 if ( pdg_code == kPiPlusID || pdg_code == kA0PlusID )
num[0]++;
1762 else if ( pdg_code == kPiMinusID || pdg_code == kA0MinusID )
num[1]++;
1763 else if ( pdg_code == kPi0ID )
num[2]++;
1764 else if ( pdg_code == kEtaID )
num[3]++;
1765 else if ( pdg_code == kEtaPrimeID )
num[4]++;
1766 else if ( pdg_code == kF0ID || pdg_code == kA00ID || pdg_code == kFPrime0ID ||
1767 pdg_code == kF0m1500ID || pdg_code == kF2ID || pdg_code == kF0m1710ID ||
1768 pdg_code == kF0600ID )
1770 else if ( pdg_code == kRhoPlusID || pdg_code == kRho2SPlusID || pdg_code == kA1PlusID )
1772 else if ( pdg_code == kRhoMinusID || pdg_code == kRho2SMinusID ||
1773 pdg_code == kA1MinusID )
1775 else if ( pdg_code == kRho0ID || pdg_code == kRho2S0ID )
num[8]++;
1776 else if ( pdg_code == kOmegaID )
num[9]++;
1777 else if ( pdg_code == kPhiID )
num[10]++;
1778 else if ( pdg_code == kKPlusID )
num[11]++;
1779 else if ( pdg_code == kKMinusID )
num[12]++;
1780 else if ( pdg_code == kK0SID )
num[13]++;
1781 else if ( pdg_code == kK0LID )
num[14]++;
1782 else if ( pdg_code == kKStarPlusID || pdg_code == kK1PlusID ||
1783 pdg_code == kK2StarPlusID || pdg_code == kK1PrimePlusID ||
1784 pdg_code == kK0StarPlusID )
1786 else if ( pdg_code == kKStarMinusID || pdg_code == kK1MinusID ||
1787 pdg_code == kK2StarMinusID || pdg_code == kK1PrimeMinusID ||
1788 pdg_code == kK0StarMinusID )
1790 else if ( pdg_code == kKStar0ID )
num[17]++;
1791 else if ( pdg_code == kKStar0BarID )
num[18]++;
1792 else if ( pdg_code == kK10ID || pdg_code == kK1Prime0ID )
num[19]++;
1793 else if ( pdg_code == kK10BarID || pdg_code == kK1Prime0BarID )
num[20]++;
1794 else if ( pdg_code == kEPlusID || pdg_code == kMuPlusID )
num[21]++;
1795 else if ( pdg_code == kEMinusID || pdg_code == kMuMinusID )
num[22]++;
1796 else if ( pdg_code == kNuEID || pdg_code == kNuEBarID || pdg_code == kNuMuID ||
1797 pdg_code == kNuMuBarID )
1799 else if ( pdg_code == kGammaID )
num[24]++;
1800 else if ( pdg_code == kGammaFSRID )
continue;
1804 cout <<
"Unknown particle: " << pdg_code << endl;
1814 if ( pdg_code == kPiPlusID )
1815 piPlus.setVectM( ( *it )->initialFourMomentum().vect(),
xmpion );
1816 if ( pdg_code == kPiMinusID )
1817 piMinus.setVectM( ( *it )->initialFourMomentum().vect(),
xmpion );
1818 if ( pdg_code == kK0SID ) k0.setVectM( ( *it )->initialFourMomentum().vect(),
xmk0 );
1819 if ( pdg_code == kK0LID ) k0.setVectM( ( *it )->initialFourMomentum().vect(),
xmk0 );
1820 HepLorentzVector daughterP4;
1821 if ( piPlus_4pi.size() > 2 || piMinus_4pi.size() > 2 )
continue;
1822 if ( kPlus_kkpipi.size() > 1 || kMinus_kkpipi.size() > 1 )
continue;
1824 if ( pdg_code == kPiPlusID )
1826 daughterP4.setVectM( ( *it )->initialFourMomentum().vect(),
xmpion );
1827 piPlus_4pi.push_back( daughterP4 );
1829 if ( pdg_code == kPiMinusID )
1831 daughterP4.setVectM( ( *it )->initialFourMomentum().vect(),
xmpion );
1832 piMinus_4pi.push_back( daughterP4 );
1834 if ( pdg_code == kKPlusID )
1836 daughterP4.setVectM( ( *it )->initialFourMomentum().vect(),
xmkaon );
1837 kPlus_kkpipi.push_back( daughterP4 );
1839 if ( pdg_code == kKMinusID )
1841 daughterP4.setVectM( ( *it )->initialFourMomentum().vect(),
xmkaon );
1842 kMinus_kkpipi.push_back( daughterP4 );
1844 if ( pdg_code == kPi0ID )
1846 daughterP4.setVectM( ( *it )->initialFourMomentum().vect(),
xmpi0 );
1847 pi0_p4.push_back( daughterP4 );
1854 for (
int i = 0; i < 26; i++ ) { nDaughters +=
num[i]; }
1873 int nUFP0 =
num[kPi0] +
num[kEta] +
num[kEtaPrime];
1874 int nUFV0 =
num[kRho0] +
num[kPhi] +
num[kOmega] +
num[kGamma];
1875 int nFV0 =
num[kKStar0] +
num[kK10];
1876 int nFV0Bar =
num[kKStar0Bar] +
num[kK10Bar];
1877 int nStrange =
num[kKMinus] +
num[kFVMinus] + nFV0Bar;
1878 int nAntiStrange =
num[kKPlus] +
num[kFVPlus] + nFV0;
1880 num[kNeutralScalar] +
num[kRho0] +
num[kOmega] +
num[kPhi] +
num[kK0S] +
num[kGamma];
1881 int nCPMinusEig =
num[kPi0] +
num[kEta] +
num[kEtaPrime] +
num[kK0L];
1882 int nCPEig = nCPPlusEig + nCPMinusEig;
1883 int nChargedPiK =
num[kPiPlus] +
num[kPiMinus] +
num[kKPlus] +
num[kKMinus];
1884 int nK0 =
num[kK0S] +
num[kK0L];
1887 double mnm_gen = 0.;
1888 double mpn_gen = 0.;
1889 double mpm_gen = 0.;
1890 bool isKsPiPi =
false;
1891 bool isKsKK =
false;
1892 bool isKsPiPiPi0 =
false;
1896 if ( nK0 == 1 &&
num[kPiPlus] == 1 &&
num[kPiMinus] && nDaughters == 3 )
1898 decay_mode = kDalitz;
1905 if (
num[kK0S] == 1 ) isKsPiPi =
true;
1907 if (
num[kPiPlus] == 2 &&
num[kPiMinus] == 2 && nDaughters == 4 ) { decay_mode = k2Pip2Pim; }
1908 if (
num[kPiPlus] == 1 &&
num[kPiMinus] == 1 &&
num[kPi0] == 2 && nDaughters == 4 )
1909 { decay_mode = kPipPim2Pi0; }
1910 if ( nK0 == 1 &&
num[kPiPlus] == 1 &&
num[kPiMinus] == 1 &&
num[kPi0] == 1 &&
1913 decay_mode = kK0PiPiPi0;
1914 if (
num[kK0S] == 1 ) isKsPiPiPi0 =
true;
1916 if (
num[kPiPlus] == 1 &&
num[kPiMinus] == 1 &&
num[kKPlus] == 1 &&
num[kKMinus] == 1 &&
1918 { decay_mode = kKKPiPi; }
1919 if (
num[kKPlus] == 1 &&
num[kKMinus] == 1 && nK0 == 1 && nDaughters == 3 )
1922 if (
num[kK0S] == 1 ) isKsKK =
true;
1925 int nDaughters_RhoPlus( 0 );
1926 int nDaughterPiPlus_RhoPlus( 0 );
1927 int nDaughterPi0_RhoPlus( 0 );
1928 int nDaughters_RhoMinus( 0 );
1929 int nDaughterPiMinus_RhoMinus( 0 );
1930 int nDaughterPi0_RhoMinus( 0 );
1931 int nDaughters_Rho0( 0 );
1932 int nDaughterPiPlus_Rho0( 0 );
1933 int nDaughterPiMinus_Rho0( 0 );
1934 int nDaughters_F0600( 0 );
1935 int nDaughterPiPlus_F0600( 0 );
1936 int nDaughterPiMinus_F0600( 0 );
1937 int nDaughters_F0( 0 );
1938 int nDaughterPiPlus_F0( 0 );
1939 int nDaughterPiMinus_F0( 0 );
1940 int nDaughters_FPrime0( 0 );
1941 int nDaughterPiPlus_FPrime0( 0 );
1942 int nDaughterPiMinus_FPrime0( 0 );
1943 int nDaughters_F01500( 0 );
1944 int nDaughterPiPlus_F01500( 0 );
1945 int nDaughterPiMinus_F01500( 0 );
1946 int nDaughters_F01710( 0 );
1947 int nDaughterPiPlus_F01710( 0 );
1948 int nDaughterPiMinus_F01710( 0 );
1949 int nDaughters_F2( 0 );
1950 int nDaughterPiPlus_F2( 0 );
1951 int nDaughterPiMinus_F2( 0 );
1952 int nDaughters_Omega( 0 );
1953 int nDaughterPiPlus_Omega( 0 );
1954 int nDaughterPiMinus_Omega( 0 );
1956 for ( Event::McParticleCol::iterator it = mcParticles->begin(); it != mcParticles->end();
1959 int pdg_code = ( *it )->particleProperty();
1960 if ( ( *it )->primaryParticle() )
continue;
1966 if ( mother_pdg == kRhoPlusID )
1971 nDaughters_RhoPlus++;
1972 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_RhoPlus++;
1973 if ( pdg_code == kPi0ID ) nDaughterPi0_RhoPlus++;
1976 if ( mother_pdg == kRhoMinusID )
1981 nDaughters_RhoMinus++;
1982 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_RhoMinus++;
1983 if ( pdg_code == kPi0ID ) nDaughterPi0_RhoMinus++;
1986 if ( mother_pdg == kRho0ID )
1992 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_Rho0++;
1993 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_Rho0++;
1996 if ( mother_pdg == kF0600ID )
2002 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_F0600++;
2003 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_F0600++;
2006 if ( mother_pdg == kF0ID )
2012 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_F0++;
2013 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_F0++;
2016 if ( mother_pdg == kFPrime0ID )
2021 nDaughters_FPrime0++;
2022 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_FPrime0++;
2023 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_FPrime0++;
2026 if ( mother_pdg == kF0m1500ID )
2031 nDaughters_F01500++;
2032 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_F01500++;
2033 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_F01500++;
2036 if ( mother_pdg == kF0m1710ID )
2041 nDaughters_F01710++;
2042 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_F01710++;
2043 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_F01710++;
2046 if ( mother_pdg == kF2ID )
2052 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_F2++;
2053 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_F2++;
2056 if ( mother_pdg == kOmegaID )
2062 if ( pdg_code == kPiPlusID ) nDaughterPiPlus_Omega++;
2063 if ( pdg_code == kPiMinusID ) nDaughterPiMinus_Omega++;
2069 if ( decay_mode == kDalitz )
2092 k0l.push_back( k0[0] );
2093 k0l.push_back( k0[1] );
2094 k0l.push_back( k0[2] );
2095 k0l.push_back( k0[3] );
2096 pip.push_back( piPlus[0] );
2097 pip.push_back( piPlus[1] );
2098 pip.push_back( piPlus[2] );
2099 pip.push_back( piPlus[3] );
2100 pim.push_back( piMinus[0] );
2101 pim.push_back( piMinus[1] );
2102 pim.push_back( piMinus[2] );
2103 pim.push_back( piMinus[3] );
2110 D0 = tKSpipi.
Amp_PFT( k0l, pip, pim );
2112 vector<double> cpk0l;
2113 vector<double> cppip;
2114 vector<double> cppim;
2118 cpk0l.push_back( -k0l[0] );
2119 cpk0l.push_back( -k0l[1] );
2120 cpk0l.push_back( -k0l[2] );
2121 cpk0l.push_back( k0l[3] );
2122 cppim.push_back( -piPlus[0] );
2123 cppim.push_back( -piPlus[1] );
2124 cppim.push_back( -piPlus[2] );
2125 cppim.push_back( piPlus[3] );
2126 cppip.push_back( -piMinus[0] );
2127 cppip.push_back( -piMinus[1] );
2128 cppip.push_back( -piMinus[2] );
2129 cppip.push_back( piMinus[3] );
2130 D0bar = tKSpipi.
Amp_PFT( cpk0l, cppip, cppim );
2139 D0 = tKLpipi.
Amp_PFT( k0l, pip, pim );
2140 vector<double> cpk0l;
2141 vector<double> cppip;
2142 vector<double> cppim;
2146 cpk0l.push_back( -k0l[0] );
2147 cpk0l.push_back( -k0l[1] );
2148 cpk0l.push_back( -k0l[2] );
2149 cpk0l.push_back( k0l[3] );
2150 cppim.push_back( -piPlus[0] );
2151 cppim.push_back( -piPlus[1] );
2152 cppim.push_back( -piPlus[2] );
2153 cppim.push_back( piPlus[3] );
2154 cppip.push_back( -piMinus[0] );
2155 cppip.push_back( -piMinus[1] );
2156 cppip.push_back( -piMinus[2] );
2157 cppip.push_back( piMinus[3] );
2158 D0bar = tKLpipi.
Amp_PFT( cpk0l, cppip, cppim );
2164 r2D0 = std::norm( D0bar ) / std::norm( D0 );
2165 double temp = std::arg( D0 ) - std::arg( D0bar );
2166 log << MSG::INFO <<
"D0 calculation " << sqrt( r2D0 ) <<
" " << temp << endmsg;
2167 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2168 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2170 deltaD0 = isKsPiPi ? deltaD0 : ( deltaD0 +
PI );
2172 double cosd =
cos( deltaD0 );
2173 double sind =
sin( deltaD0 );
2174 if ( mpn_gen - mnm_gen > 0. )
2183 r2D0 = std::norm( D0 ) / std::norm( D0bar );
2184 double temp = std::arg( D0bar ) - std::arg( D0 );
2185 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2186 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2188 deltaD0 = isKsPiPi ? deltaD0 : ( deltaD0 +
PI );
2190 double cosd =
cos( deltaD0 );
2191 double sind =
sin( deltaD0 );
2192 if ( mpn_gen - mnm_gen < 0. )
2200 else if ( decay_mode == k2Pip2Pim )
2205 HepLorentzVector pip1_4pi = ( piPlus_4pi.at( 0 ) );
2206 HepLorentzVector pim1_4pi = ( piMinus_4pi.at( 0 ) );
2207 HepLorentzVector pip2_4pi = ( piPlus_4pi.at( 1 ) );
2208 HepLorentzVector pim2_4pi = ( piMinus_4pi.at( 1 ) );
2209 pip1_4pi.boost( -0.011, 0, 0 );
2210 pip2_4pi.boost( -0.011, 0, 0 );
2211 pim1_4pi.boost( -0.011, 0, 0 );
2212 pim2_4pi.boost( -0.011, 0, 0 );
2213 std::complex<double> D0, D0bar;
2218 std::vector<double> pip1;
2220 pip1.push_back( pip1_4pi[0] );
2221 pip1.push_back( pip1_4pi[1] );
2222 pip1.push_back( pip1_4pi[2] );
2223 pip1.push_back( pip1_4pi[3] );
2224 std::vector<double> pim1;
2226 pim1.push_back( pim1_4pi[0] );
2227 pim1.push_back( pim1_4pi[1] );
2228 pim1.push_back( pim1_4pi[2] );
2229 pim1.push_back( pim1_4pi[3] );
2230 std::vector<double> pip2;
2232 pip2.push_back( pip2_4pi[0] );
2233 pip2.push_back( pip2_4pi[1] );
2234 pip2.push_back( pip2_4pi[2] );
2235 pip2.push_back( pip2_4pi[3] );
2236 std::vector<double> pim2;
2238 pim2.push_back( pim2_4pi[0] );
2239 pim2.push_back( pim2_4pi[1] );
2240 pim2.push_back( pim2_4pi[2] );
2241 pim2.push_back( pim2_4pi[3] );
2245 D0 = t2pip2pim.
Amp( pip1, pim1, pip2, pim2 );
2250 std::vector<double> cppip1;
2252 cppip1.push_back( -pim1_4pi[0] );
2253 cppip1.push_back( -pim1_4pi[1] );
2254 cppip1.push_back( -pim1_4pi[2] );
2255 cppip1.push_back( pim1_4pi[3] );
2256 std::vector<double> cppim1;
2258 cppim1.push_back( -pip1_4pi[0] );
2259 cppim1.push_back( -pip1_4pi[1] );
2260 cppim1.push_back( -pip1_4pi[2] );
2261 cppim1.push_back( pip1_4pi[3] );
2262 std::vector<double> cppip2;
2264 cppip2.push_back( -pim2_4pi[0] );
2265 cppip2.push_back( -pim2_4pi[1] );
2266 cppip2.push_back( -pim2_4pi[2] );
2267 cppip2.push_back( pim2_4pi[3] );
2268 std::vector<double> cppim2;
2270 cppim2.push_back( -pip2_4pi[0] );
2271 cppim2.push_back( -pip2_4pi[1] );
2272 cppim2.push_back( -pip2_4pi[2] );
2273 cppim2.push_back( pip2_4pi[3] );
2275 D0bar = t2pip2pim.
Amp( cppip1, cppim1, cppip2, cppim2 );
2280 r2D0 = std::norm( D0bar ) / std::norm( D0 );
2281 double temp = std::arg( D0 ) - std::arg( D0bar );
2282 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2283 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2286 double cosd =
cos( deltaD0 );
2287 double sind =
sin( deltaD0 );
2297 r2D0 = std::norm( D0 ) / std::norm( D0bar );
2298 double temp = std::arg( D0bar ) - std::arg( D0 );
2299 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2300 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2303 double cosd =
cos( deltaD0 );
2304 double sind =
sin( deltaD0 );
2313 else if ( decay_mode == kPipPim2Pi0 )
2318 HepLorentzVector pip1_4pi = ( piPlus_4pi.at( 0 ) );
2319 HepLorentzVector pim1_4pi = ( piMinus_4pi.at( 0 ) );
2320 HepLorentzVector pi01_p4 = ( pi0_p4.at( 0 ) );
2321 HepLorentzVector pi02_p4 = ( pi0_p4.at( 1 ) );
2322 pip1_4pi.boost( -0.011, 0, 0 );
2323 pim1_4pi.boost( -0.011, 0, 0 );
2324 pi01_p4.boost( -0.011, 0, 0 );
2325 pi02_p4.boost( -0.011, 0, 0 );
2326 std::complex<double> D0, D0bar;
2331 std::vector<double> pip1;
2333 pip1.push_back( pip1_4pi[0] );
2334 pip1.push_back( pip1_4pi[1] );
2335 pip1.push_back( pip1_4pi[2] );
2336 pip1.push_back( pip1_4pi[3] );
2337 std::vector<double> pim1;
2339 pim1.push_back( pim1_4pi[0] );
2340 pim1.push_back( pim1_4pi[1] );
2341 pim1.push_back( pim1_4pi[2] );
2342 pim1.push_back( pim1_4pi[3] );
2343 std::vector<double> pi01;
2345 pi01.push_back( pi01_p4[0] );
2346 pi01.push_back( pi01_p4[1] );
2347 pi01.push_back( pi01_p4[2] );
2348 pi01.push_back( pi01_p4[3] );
2349 std::vector<double> pi02;
2351 pi02.push_back( pi02_p4[0] );
2352 pi02.push_back( pi02_p4[1] );
2353 pi02.push_back( pi02_p4[2] );
2354 pi02.push_back( pi02_p4[3] );
2358 D0 = tpippim2pi0.
Amp( pip1, pim1, pi01, pi02 );
2363 std::vector<double> cppip1;
2365 cppip1.push_back( -pim1_4pi[0] );
2366 cppip1.push_back( -pim1_4pi[1] );
2367 cppip1.push_back( -pim1_4pi[2] );
2368 cppip1.push_back( pim1_4pi[3] );
2369 std::vector<double> cppim1;
2371 cppim1.push_back( -pip1_4pi[0] );
2372 cppim1.push_back( -pip1_4pi[1] );
2373 cppim1.push_back( -pip1_4pi[2] );
2374 cppim1.push_back( pip1_4pi[3] );
2375 std::vector<double> cppi01;
2377 cppi01.push_back( -pi01_p4[0] );
2378 cppi01.push_back( -pi01_p4[1] );
2379 cppi01.push_back( -pi01_p4[2] );
2380 cppi01.push_back( pi01_p4[3] );
2381 std::vector<double> cppi02;
2383 cppi02.push_back( -pi02_p4[0] );
2384 cppi02.push_back( -pi02_p4[1] );
2385 cppi02.push_back( -pi02_p4[2] );
2386 cppi02.push_back( pi02_p4[3] );
2388 D0bar = tpippim2pi0.
Amp( cppip1, cppim1, cppi01, cppi02 );
2393 r2D0 = std::norm( D0bar ) / std::norm( D0 );
2394 double temp = std::arg( D0 ) - std::arg( D0bar );
2395 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2396 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2399 double cosd =
cos( deltaD0 );
2400 double sind =
sin( deltaD0 );
2410 r2D0 = std::norm( D0 ) / std::norm( D0bar );
2411 double temp = std::arg( D0bar ) - std::arg( D0 );
2412 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2413 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2416 double cosd =
cos( deltaD0 );
2417 double sind =
sin( deltaD0 );
2424 else if ( decay_mode == kK0PiPiPi0 )
2439 HepLorentzVector pip_kspipipi0 = ( piPlus_4pi.at( 0 ) );
2440 HepLorentzVector pim_kspipipi0 = ( piMinus_4pi.at( 0 ) );
2441 HepLorentzVector k0_kspipipi0 = k0;
2442 HepLorentzVector pi0_kspipipi0 = ( pi0_p4.at( 0 ) );
2443 pip_kspipipi0.boost( -0.011, 0, 0 );
2444 pim_kspipipi0.boost( -0.011, 0, 0 );
2445 k0_kspipipi0.boost( -0.011, 0, 0 );
2446 pi0_kspipipi0.boost( -0.011, 0, 0 );
2457 k0l.push_back( k0_kspipipi0[0] );
2458 k0l.push_back( k0_kspipipi0[1] );
2459 k0l.push_back( k0_kspipipi0[2] );
2460 k0l.push_back( k0_kspipipi0[3] );
2461 pip.push_back( pip_kspipipi0[0] );
2462 pip.push_back( pip_kspipipi0[1] );
2463 pip.push_back( pip_kspipipi0[2] );
2464 pip.push_back( pip_kspipipi0[3] );
2465 pim.push_back( pim_kspipipi0[0] );
2466 pim.push_back( pim_kspipipi0[1] );
2467 pim.push_back( pim_kspipipi0[2] );
2468 pim.push_back( pim_kspipipi0[3] );
2469 pi0.push_back( pi0_kspipipi0[0] );
2470 pi0.push_back( pi0_kspipipi0[1] );
2471 pi0.push_back( pi0_kspipipi0[2] );
2472 pi0.push_back( pi0_kspipipi0[3] );
2478 D0 = tKSpipipi0.
Amp( k0l, pip, pim, pi0 );
2480 vector<double> cpk0l;
2481 vector<double> cppip;
2482 vector<double> cppim;
2483 vector<double> cppi0;
2488 cpk0l.push_back( -k0l[0] );
2489 cpk0l.push_back( -k0l[1] );
2490 cpk0l.push_back( -k0l[2] );
2491 cpk0l.push_back( k0l[3] );
2492 cppim.push_back( -pip[0] );
2493 cppim.push_back( -pip[1] );
2494 cppim.push_back( -pip[2] );
2495 cppim.push_back( pip[3] );
2496 cppip.push_back( -pim[0] );
2497 cppip.push_back( -pim[1] );
2498 cppip.push_back( -pim[2] );
2499 cppip.push_back( pim[3] );
2500 cppi0.push_back( -pi0[0] );
2501 cppi0.push_back( -pi0[1] );
2502 cppi0.push_back( -pi0[2] );
2503 cppi0.push_back( pi0[3] );
2504 D0bar = tKSpipipi0.
Amp( cpk0l, cppip, cppim, cppi0 );
2510 D0 = tKSpipipi0.
Amp( k0l, pip, pim, pi0 );
2512 vector<double> cpk0l;
2513 vector<double> cppip;
2514 vector<double> cppim;
2515 vector<double> cppi0;
2520 cpk0l.push_back( -k0l[0] );
2521 cpk0l.push_back( -k0l[1] );
2522 cpk0l.push_back( -k0l[2] );
2523 cpk0l.push_back( k0l[3] );
2524 cppim.push_back( -pip[0] );
2525 cppim.push_back( -pip[1] );
2526 cppim.push_back( -pip[2] );
2527 cppim.push_back( pip[3] );
2528 cppip.push_back( -pim[0] );
2529 cppip.push_back( -pim[1] );
2530 cppip.push_back( -pim[2] );
2531 cppip.push_back( pim[3] );
2532 cppi0.push_back( -pi0[0] );
2533 cppi0.push_back( -pi0[1] );
2534 cppi0.push_back( -pi0[2] );
2535 cppi0.push_back( pi0[3] );
2536 D0bar = tKSpipipi0.
Amp( cpk0l, cppip, cppim, cppi0 );
2550 r2D0 = std::norm( D0bar ) / std::norm( D0 );
2551 double temp = std::arg( D0 ) - std::arg( D0bar );
2552 log << MSG::INFO <<
"D0 calculation " << sqrt( r2D0 ) <<
" " << temp << endmsg;
2553 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2554 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2556 deltaD0 = isKsPiPiPi0 ? ( deltaD0 +
PI ) : ( deltaD0 );
2558 double cosd =
cos( deltaD0 );
2559 double sind =
sin( deltaD0 );
2560 if ( mpn_gen - mnm_gen > 0. )
2569 r2D0 = std::norm( D0 ) / std::norm( D0bar );
2570 double temp = std::arg( D0bar ) - std::arg( D0 );
2571 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2572 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2574 deltaD0 = isKsPiPiPi0 ? ( deltaD0 +
PI ) : ( deltaD0 );
2576 double cosd =
cos( deltaD0 );
2577 double sind =
sin( deltaD0 );
2578 if ( mpn_gen - mnm_gen < 0. )
2586 else if ( decay_mode == kKKPiPi )
2602 HepLorentzVector pip_kkpipi = ( piPlus_4pi.at( 0 ) );
2603 HepLorentzVector pim_kkpipi = ( piMinus_4pi.at( 0 ) );
2604 HepLorentzVector kp_kkpipi = ( kPlus_kkpipi.at( 0 ) );
2605 HepLorentzVector km_kkpipi = ( kMinus_kkpipi.at( 0 ) );
2607 pip.push_back( pip_kkpipi[0] );
2608 pip.push_back( pip_kkpipi[1] );
2609 pip.push_back( pip_kkpipi[2] );
2610 pip.push_back( pip_kkpipi[3] );
2611 pim.push_back( pim_kkpipi[0] );
2612 pim.push_back( pim_kkpipi[1] );
2613 pim.push_back( pim_kkpipi[2] );
2614 pim.push_back( pim_kkpipi[3] );
2615 kp.push_back( kp_kkpipi[0] );
2616 kp.push_back( kp_kkpipi[1] );
2617 kp.push_back( kp_kkpipi[2] );
2618 kp.push_back( kp_kkpipi[3] );
2619 km.push_back( km_kkpipi[0] );
2620 km.push_back( km_kkpipi[1] );
2621 km.push_back( km_kkpipi[2] );
2622 km.push_back( km_kkpipi[3] );
2624 pdau[0] = kp_kkpipi[0];
2625 pdau[1] = kp_kkpipi[1];
2626 pdau[2] = kp_kkpipi[2];
2627 pdau[3] = kp_kkpipi[3];
2628 pdau[4] = km_kkpipi[0];
2629 pdau[5] = km_kkpipi[1];
2630 pdau[6] = km_kkpipi[2];
2631 pdau[7] = km_kkpipi[3];
2632 pdau[8] = pip_kkpipi[0];
2633 pdau[9] = pip_kkpipi[1];
2634 pdau[10] = pip_kkpipi[2];
2635 pdau[11] = pip_kkpipi[3];
2636 pdau[12] = pim_kkpipi[0];
2637 pdau[13] = pim_kkpipi[1];
2638 pdau[14] = pim_kkpipi[2];
2639 pdau[15] = pim_kkpipi[3];
2643 D0 = tKKpipi.
AMP( pdau, 1 );
2645 pdau[0] = -km_kkpipi[0];
2646 pdau[1] = -km_kkpipi[1];
2647 pdau[2] = -km_kkpipi[2];
2648 pdau[3] = km_kkpipi[3];
2649 pdau[4] = -kp_kkpipi[0];
2650 pdau[5] = -kp_kkpipi[1];
2651 pdau[6] = -kp_kkpipi[2];
2652 pdau[7] = kp_kkpipi[3];
2653 pdau[8] = -pim_kkpipi[0];
2654 pdau[9] = -pim_kkpipi[1];
2655 pdau[10] = -pim_kkpipi[2];
2656 pdau[11] = pim_kkpipi[3];
2657 pdau[12] = -pip_kkpipi[0];
2658 pdau[13] = -pip_kkpipi[1];
2659 pdau[14] = -pip_kkpipi[2];
2660 pdau[15] = pip_kkpipi[3];
2661 D0bar = tKKpipi.
AMP( pdau, 1 );
2666 r2D0 = std::norm( D0bar ) / std::norm( D0 );
2667 double temp = std::arg( D0 ) - std::arg( D0bar );
2668 log << MSG::INFO <<
"D0 calculation " << sqrt( r2D0 ) <<
" " << temp << endmsg;
2669 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2670 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2675 r2D0 = std::norm( D0 ) / std::norm( D0bar );
2676 double temp = std::arg( D0bar ) - std::arg( D0 );
2677 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2678 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2682 else if ( decay_mode == kK0KK )
2686 HepLorentzVector kPlus = ( kPlus_kkpipi.at( 0 ) );
2687 HepLorentzVector kMinus = ( kMinus_kkpipi.at( 0 ) );
2695 k0l.push_back( k0[0] );
2696 k0l.push_back( k0[1] );
2697 k0l.push_back( k0[2] );
2698 k0l.push_back( k0[3] );
2699 kp.push_back( kPlus[0] );
2700 kp.push_back( kPlus[1] );
2701 kp.push_back( kPlus[2] );
2702 kp.push_back( kPlus[3] );
2703 km.push_back( kMinus[0] );
2704 km.push_back( kMinus[1] );
2705 km.push_back( kMinus[2] );
2706 km.push_back( kMinus[3] );
2713 tKSLKK.
init( 310, 0 );
2714 D0 = tKSLKK.
Amp( k0l, kp, km, 310, 0 );
2716 vector<double> cpk0l;
2717 vector<double> cpkp;
2718 vector<double> cpkm;
2722 cpk0l.push_back( -k0l[0] );
2723 cpk0l.push_back( -k0l[1] );
2724 cpk0l.push_back( -k0l[2] );
2725 cpk0l.push_back( k0l[3] );
2726 cpkm.push_back( -kPlus[0] );
2727 cpkm.push_back( -kPlus[1] );
2728 cpkm.push_back( -kPlus[2] );
2729 cpkm.push_back( kPlus[3] );
2730 cpkp.push_back( -kMinus[0] );
2731 cpkp.push_back( -kMinus[1] );
2732 cpkp.push_back( -kMinus[2] );
2733 cpkp.push_back( kMinus[3] );
2735 D0bar = tKSLKK.
Amp( cpk0l, cpkp, cpkm, 310, 0 );
2742 tKSLKK.
init( 130, 1 );
2743 D0 = tKSLKK.
Amp( k0l, kp, km, 130, 1 );
2744 vector<double> cpk0l;
2745 vector<double> cpkp;
2746 vector<double> cpkm;
2750 cpk0l.push_back( -k0l[0] );
2751 cpk0l.push_back( -k0l[1] );
2752 cpk0l.push_back( -k0l[2] );
2753 cpk0l.push_back( k0l[3] );
2754 cpkm.push_back( -kPlus[0] );
2755 cpkm.push_back( -kPlus[1] );
2756 cpkm.push_back( -kPlus[2] );
2757 cpkm.push_back( kPlus[3] );
2758 cpkp.push_back( -kMinus[0] );
2759 cpkp.push_back( -kMinus[1] );
2760 cpkp.push_back( -kMinus[2] );
2761 cpkp.push_back( kMinus[3] );
2763 D0bar = tKSLKK.
Amp( cpk0l, cpkp, cpkm, 130, 1 );
2769 r2D0 = std::norm( D0bar ) / std::norm( D0 );
2770 double temp = std::arg( D0 ) - std::arg( D0bar );
2771 log << MSG::INFO <<
"D0 calculation " << sqrt( r2D0 ) <<
" " << temp << endmsg;
2772 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2773 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2775 deltaD0 = isKsKK ? deltaD0 : ( deltaD0 +
PI );
2779 r2D0 = std::norm( D0 ) / std::norm( D0bar );
2780 double temp = std::arg( D0bar ) - std::arg( D0 );
2781 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2782 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2784 deltaD0 = isKsKK ? deltaD0 : ( deltaD0 +
PI );
2787 else if (
num[kLeptonPlus] == 1 )
2789 decay_mode = kSLPlus;
2795 else if (
num[kLeptonMinus] == 1 )
2797 decay_mode = kSLMinus;
2804 else if ( nDaughters == 3 &&
num[kPiPlus] == 1 &&
num[kPiMinus] == 1 &&
num[kPi0] == 1 )
2807 if ( m_debug ) cout <<
"PiPiPi0 mode" << endl;
2808 decay_mode = kPipPimPi0;
2811 HepLorentzVector pip1_4pi = ( piPlus_4pi.at( 0 ) );
2812 HepLorentzVector pim1_4pi = ( piMinus_4pi.at( 0 ) );
2813 HepLorentzVector pi01_p4 = ( pi0_p4.at( 0 ) );
2814 pip1_4pi.boost( -0.011, 0, 0 );
2815 pim1_4pi.boost( -0.011, 0, 0 );
2816 pi01_p4.boost( -0.011, 0, 0 );
2817 std::complex<double> D0, D0bar;
2822 std::vector<double> pip1;
2824 pip1.push_back( pip1_4pi[0] );
2825 pip1.push_back( pip1_4pi[1] );
2826 pip1.push_back( pip1_4pi[2] );
2827 pip1.push_back( pip1_4pi[3] );
2828 std::vector<double> pim1;
2830 pim1.push_back( pim1_4pi[0] );
2831 pim1.push_back( pim1_4pi[1] );
2832 pim1.push_back( pim1_4pi[2] );
2833 pim1.push_back( pim1_4pi[3] );
2834 std::vector<double> pi01;
2836 pi01.push_back( pi01_p4[0] );
2837 pi01.push_back( pi01_p4[1] );
2838 pi01.push_back( pi01_p4[2] );
2839 pi01.push_back( pi01_p4[3] );
2843 D0 = tpipipi0.
Amp( pip1, pim1, pi01 );
2848 std::vector<double> cppip1;
2850 cppip1.push_back( -pim1_4pi[0] );
2851 cppip1.push_back( -pim1_4pi[1] );
2852 cppip1.push_back( -pim1_4pi[2] );
2853 cppip1.push_back( pim1_4pi[3] );
2854 std::vector<double> cppim1;
2856 cppim1.push_back( -pip1_4pi[0] );
2857 cppim1.push_back( -pip1_4pi[1] );
2858 cppim1.push_back( -pip1_4pi[2] );
2859 cppim1.push_back( pip1_4pi[3] );
2860 std::vector<double> cppi01;
2862 cppi01.push_back( -pi01_p4[0] );
2863 cppi01.push_back( -pi01_p4[1] );
2864 cppi01.push_back( -pi01_p4[2] );
2865 cppi01.push_back( pi01_p4[3] );
2867 D0bar = ( -1.0 ) * tpipipi0.
Amp( cppip1, cppim1, cppi01 );
2872 r2D0 = std::norm( D0bar ) / std::norm( D0 );
2873 double temp = std::arg( D0 ) - std::arg( D0bar );
2874 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2875 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2878 double cosd =
cos( deltaD0 );
2879 double sind =
sin( deltaD0 );
2883 r2D0 = std::norm( D0 ) / std::norm( D0bar );
2884 double temp = std::arg( D0bar ) - std::arg( D0 );
2885 while ( temp < -TMath::Pi() ) { temp += 2.0 * TMath::Pi(); }
2886 while ( temp > TMath::Pi() ) { temp -= 2.0 * TMath::Pi(); }
2889 double cosd =
cos( deltaD0 );
2890 double sind =
sin( deltaD0 );
2892 if ( m_debug ) cout <<
"deltaD0=" << deltaD0 << endl;
2893 if ( m_debug ) cout <<
"r2D0=" << r2D0 << endl;
2896 else if ( ( nDaughters == 2 &&
2897 ( (
num[kPiPlus] == 1 &&
num[kPiMinus] == 1 ) || nUFP0 == 2 ||
2898 num[kNeutralScalar] == 2 || ( nUFP0 == 1 && nUFV0 == 1 ) ||
2899 (
num[kKPlus] == 1 &&
num[kKMinus] == 1 ) ||
num[kK0S] == 2 ||
2900 num[kK0L] == 2 || (
num[kK0L] == 1 && nUFP0 == 1 ) ||
2901 (
num[kK0S] == 1 &&
num[kNeutralScalar] == 1 ) ||
2902 (
num[kK0L] == 1 && nUFV0 == 1 ) ||
2903 (
num[kUFVPlus] == 1 &&
num[kPiMinus] == 1 ) ||
2904 (
num[kUFVMinus] == 1 &&
num[kPiPlus] == 1 ) ) ) ||
2905 ( nDaughters == 3 &&
2906 ( ( nCPPlusEig == 1 &&
num[kPi0] == 2 ) || (
num[kK0S] == 3 ) ||
2907 (
num[kK0S] == 1 &&
num[kK0L] == 2 ) ||
2908 (
num[kK0S] == 1 &&
num[kK0L] == 1 && nUFP0 == 1 ) ||
2909 (
num[kK0S] == 1 && nUFP0 == 2 ) ) ) ||
2910 ( nDaughters == 4 && (
num[kK0L] == 1 && nUFP0 == 3 ) ||
2911 ( (
num[kK0S] == 2 ||
num[kK0L] == 2 ) && nUFP0 == 2 ) ) )
2913 decay_mode = kCPPlus;
2920 else if ( ( nDaughters == 2 && ( (
num[kK0S] == 1 && nUFP0 == 1 ) ||
2921 (
num[kK0L] == 1 &&
num[kNeutralScalar] == 1 ) ||
2922 (
num[kK0S] == 1 && nUFV0 == 1 ) ||
2923 (
num[kNeutralScalar] == 1 && nUFV0 == 1 ) ||
2924 ( nUFP0 == 1 &&
num[kNeutralScalar] == 1 ) ) ) ||
2925 ( nDaughters == 3 && ( ( nCPMinusEig == 3 &&
num[kPi0] == 2 ) ||
2927 (
num[kPi0] == 3 ) || (
num[kK0L] == 3 ) ||
2928 (
num[kK0S] == 2 &&
num[kK0L] == 1 ) ||
2929 ( (
num[kK0S] == 2 ||
num[kK0L] == 2 ) && nUFP0 == 1 ) ||
2930 (
num[kK0L] == 1 && nUFP0 == 2 ) ) ) ||
2931 ( nDaughters == 4 && (
num[kK0S] == 1 &&
num[kPi0] == 3 ) ||
2932 ( (
num[kK0S] == 1 &&
num[kK0L] == 1 ) && nUFP0 == 2 ) ) )
2934 decay_mode = kCPMinus;
2940 else if ( nStrange == nAntiStrange + 1 )
2942 if ( m_debug ) cout << nDaughters << endl;
2943 if ( m_debug ) cout <<
num[kKMinus] << endl;
2944 if ( m_debug ) cout <<
num[kPiMinus] << endl;
2945 if ( m_debug ) cout <<
num[kPiPlus] << endl;
2948 if ( (
num[kKMinus] == 1 &&
num[kPiPlus] == 2 &&
num[kPiMinus] == 1 ) &&
2951 if ( m_debug ) cout <<
"True K-3Pi " << endl;
2952 decay_mode = kFlavoredCF_3;
2966 HepLorentzVector kp_kpipipi = ( kMinus_kkpipi.at( 0 ) );
2967 HepLorentzVector pi1_kpipipi = ( piPlus_4pi.at( 0 ) );
2968 HepLorentzVector pi2_kpipipi = ( piPlus_4pi.at( 1 ) );
2969 HepLorentzVector pi3_kpipipi = ( piMinus_4pi.at( 0 ) );
2971 kp.push_back( kp_kpipipi[0] );
2972 kp.push_back( kp_kpipipi[1] );
2973 kp.push_back( kp_kpipipi[2] );
2974 kp.push_back( kp_kpipipi[3] );
2975 pi1.push_back( pi1_kpipipi[0] );
2976 pi1.push_back( pi1_kpipipi[1] );
2977 pi1.push_back( pi1_kpipipi[2] );
2978 pi1.push_back( pi1_kpipipi[3] );
2979 pi2.push_back( pi2_kpipipi[0] );
2980 pi2.push_back( pi2_kpipipi[1] );
2981 pi2.push_back( pi2_kpipipi[2] );
2982 pi2.push_back( pi2_kpipipi[3] );
2983 pi3.push_back( pi3_kpipipi[0] );
2984 pi3.push_back( pi3_kpipipi[1] );
2985 pi3.push_back( pi3_kpipipi[2] );
2986 pi3.push_back( pi3_kpipipi[3] );
3007 D0 = tKpipipi.
AMP( pdau, 1 );
3011 std::complex<double> dcs_offset =
3012 0.0601387 *
exp( std::complex<double>( 0, 1 ) * 1.04827 *
M_PI / 180. );
3013 D0bar = dcs_offset * tpiKpipi.
AMP( pdau, 1 );
3014 deltaD0 = ( std::arg( D0 * std::conj( D0bar ) ) + m_dCF_3 );
3015 r2D0 = std::norm( D0bar ) / std::norm( D0 );
3017 else if ( (
num[kKMinus] == 1 &&
num[kPiPlus] == 1 &&
num[kPi0] == 1 ) &&
3020 decay_mode = kFlavoredCF_1;
3022 r2D0 = pow( m_rCF_1, 2 );
3029 if ( m_debug ) cout <<
"True K-Pi " << endl;
3030 decay_mode = kFlavoredCF_0;
3032 r2D0 = pow( m_rCF_0, 2 );
3039 if ( (
num[kKMinus] == 1 &&
num[kPiPlus] == 2 &&
num[kPiMinus] == 1 ) &&
3042 decay_mode = kFlavoredCF_3;
3056 HepLorentzVector kp_kpipipi = ( kMinus_kkpipi.at( 0 ) );
3057 HepLorentzVector pi1_kpipipi = ( piPlus_4pi.at( 0 ) );
3058 HepLorentzVector pi2_kpipipi = ( piPlus_4pi.at( 1 ) );
3059 HepLorentzVector pi3_kpipipi = ( piMinus_4pi.at( 0 ) );
3061 kp.push_back( kp_kpipipi[0] );
3062 kp.push_back( kp_kpipipi[1] );
3063 kp.push_back( kp_kpipipi[2] );
3064 kp.push_back( kp_kpipipi[3] );
3065 pi1.push_back( pi1_kpipipi[0] );
3066 pi1.push_back( pi1_kpipipi[1] );
3067 pi1.push_back( pi1_kpipipi[2] );
3068 pi1.push_back( pi1_kpipipi[3] );
3069 pi2.push_back( pi2_kpipipi[0] );
3070 pi2.push_back( pi2_kpipipi[1] );
3071 pi2.push_back( pi2_kpipipi[2] );
3072 pi2.push_back( pi2_kpipipi[3] );
3073 pi3.push_back( pi3_kpipipi[0] );
3074 pi3.push_back( pi3_kpipipi[1] );
3075 pi3.push_back( pi3_kpipipi[2] );
3076 pi3.push_back( pi3_kpipipi[3] );
3097 D0 = tKpipipi.
AMP( pdau, 1 );
3101 std::complex<double> dcs_offset =
3102 0.0601387 *
exp( std::complex<double>( 0, 1 ) * 1.04827 *
M_PI / 180. );
3103 D0bar = dcs_offset * tpiKpipi.
AMP( pdau, 1 );
3104 deltaD0 = -( std::arg( D0 * std::conj( D0bar ) ) + m_dCF_3 );
3105 r2D0 = std::norm( D0 ) / std::norm( D0bar );
3107 else if ( (
num[kKMinus] == 1 &&
num[kPiPlus] == 1 &&
num[kPi0] == 1 ) &&
3110 decay_mode = kFlavoredCF_1;
3112 r2D0 = 1. / pow( m_rCF_1, 2 );
3119 decay_mode = kFlavoredCF_0;
3121 r2D0 = 1. / pow( m_rCF_0, 2 );
3127 else if ( nAntiStrange == nStrange + 1 )
3131 if ( (
num[kKPlus] == 1 &&
num[kPiMinus] == 2 &&
num[kPiPlus] == 1 ) && nDaughters == 4 )
3133 decay_mode = kFlavoredCFBar_3;
3147 HepLorentzVector kp_kpipipi = ( kPlus_kkpipi.at( 0 ) );
3148 HepLorentzVector pi1_kpipipi = ( piMinus_4pi.at( 0 ) );
3149 HepLorentzVector pi2_kpipipi = ( piMinus_4pi.at( 1 ) );
3150 HepLorentzVector pi3_kpipipi = ( piPlus_4pi.at( 0 ) );
3152 kp.push_back( -kp_kpipipi[0] );
3153 kp.push_back( -kp_kpipipi[1] );
3154 kp.push_back( -kp_kpipipi[2] );
3155 kp.push_back( kp_kpipipi[3] );
3156 pi1.push_back( -pi1_kpipipi[0] );
3157 pi1.push_back( -pi1_kpipipi[1] );
3158 pi1.push_back( -pi1_kpipipi[2] );
3159 pi1.push_back( pi1_kpipipi[3] );
3160 pi2.push_back( -pi2_kpipipi[0] );
3161 pi2.push_back( -pi2_kpipipi[1] );
3162 pi2.push_back( -pi2_kpipipi[2] );
3163 pi2.push_back( pi2_kpipipi[3] );
3164 pi3.push_back( -pi3_kpipipi[0] );
3165 pi3.push_back( -pi3_kpipipi[1] );
3166 pi3.push_back( -pi3_kpipipi[2] );
3167 pi3.push_back( pi3_kpipipi[3] );
3188 D0 = tKpipipi.
AMP( pdau, 1 );
3192 std::complex<double> dcs_offset =
3193 0.0601387 *
exp( std::complex<double>( 0, 1 ) * 1.04827 *
M_PI / 180. );
3194 D0bar = dcs_offset * tpiKpipi.
AMP( pdau, 1 );
3195 deltaD0 = ( std::arg( D0 * std::conj( D0bar ) ) + m_dCF_3 );
3196 r2D0 = std::norm( D0bar ) / std::norm( D0 );
3198 else if ( (
num[kKPlus] == 1 &&
num[kPiMinus] == 1 &&
num[kPi0] == 1 ) &&
3201 decay_mode = kFlavoredCFBar_1;
3203 r2D0 = pow( m_rCF_1, 2 );
3210 decay_mode = kFlavoredCFBar_0;
3212 r2D0 = pow( m_rCF_0, 2 );
3219 if ( (
num[kKPlus] == 1 &&
num[kPiMinus] == 2 &&
num[kPiPlus] == 1 ) && nDaughters == 4 )
3221 decay_mode = kFlavoredCFBar_3;
3235 HepLorentzVector kp_kpipipi = ( kPlus_kkpipi.at( 0 ) );
3236 HepLorentzVector pi1_kpipipi = ( piMinus_4pi.at( 0 ) );
3237 HepLorentzVector pi2_kpipipi = ( piMinus_4pi.at( 1 ) );
3238 HepLorentzVector pi3_kpipipi = ( piPlus_4pi.at( 0 ) );
3240 kp.push_back( -kp_kpipipi[0] );
3241 kp.push_back( -kp_kpipipi[1] );
3242 kp.push_back( -kp_kpipipi[2] );
3243 kp.push_back( kp_kpipipi[3] );
3244 pi1.push_back( -pi1_kpipipi[0] );
3245 pi1.push_back( -pi1_kpipipi[1] );
3246 pi1.push_back( -pi1_kpipipi[2] );
3247 pi1.push_back( pi1_kpipipi[3] );
3248 pi2.push_back( -pi2_kpipipi[0] );
3249 pi2.push_back( -pi2_kpipipi[1] );
3250 pi2.push_back( -pi2_kpipipi[2] );
3251 pi2.push_back( pi2_kpipipi[3] );
3252 pi3.push_back( -pi3_kpipipi[0] );
3253 pi3.push_back( -pi3_kpipipi[1] );
3254 pi3.push_back( -pi3_kpipipi[2] );
3255 pi3.push_back( pi3_kpipipi[3] );
3276 D0 = tKpipipi.
AMP( pdau, 1 );
3280 std::complex<double> dcs_offset =
3281 0.0601387 *
exp( std::complex<double>( 0, 1 ) * 1.04827 *
M_PI / 180. );
3282 D0bar = dcs_offset * tpiKpipi.
AMP( pdau, 1 );
3283 deltaD0 = -( std::arg( D0 * std::conj( D0bar ) ) + m_dCF_3 );
3284 r2D0 = std::norm( D0 ) / std::norm( D0bar );
3286 else if ( (
num[kKPlus] == 1 &&
num[kPiMinus] == 1 &&
num[kPi0] == 1 ) &&
3289 decay_mode = kFlavoredCFBar_1;
3291 r2D0 = 1. / pow( m_rCF_1, 2 );
3298 decay_mode = kFlavoredCFBar_0;
3300 r2D0 = 1. / pow( m_rCF_0, 2 );
3306 else if ( nStrange == nAntiStrange )
3308 if ( (
num[kKPlus] > 0 && (
num[kKPlus] ==
num[kFVMinus] ||
3309 num[kKPlus] == nFV0Bar ) ) ||
3310 ( nK0 > 0 && nFV0 != nFV0Bar && nK0 == nFV0Bar ) ||
3311 (
num[kPiPlus] > 0 &&
num[kPiPlus] ==
num[kUFVMinus] ) )
3313 decay_mode = kFlavoredCS;
3318 r2D0 = pow( m_rCS, 2 );
3323 r2D0 = 1. / pow( m_rCS, 2 );
3327 else if ( (
num[kKMinus] > 0 &&
3328 (
num[kKMinus] ==
num[kFVPlus] ||
num[kKMinus] == nFV0 ) ) ||
3329 ( nK0 > 0 && nFV0 != nFV0Bar && nK0 == nFV0 ) ||
3330 (
num[kPiMinus] > 0 &&
num[kPiMinus] ==
num[kUFVPlus] ) )
3332 decay_mode = kFlavoredCSBar;
3337 r2D0 = pow( m_rCS, 2 );
3342 r2D0 = 1. / pow( m_rCS, 2 );
3350 else if ( ( nDaughters >= 3 &&
num[kPiPlus] ==
num[kPiMinus] &&
3351 num[kKPlus] ==
num[kKMinus] && nChargedPiK + nCPEig == nDaughters ) ||
3352 nUFV0 == nDaughters || (
num[kKStar0] > 0 &&
num[kKStar0] ==
num[kKStar0Bar] ) ||
3353 (
num[kK10] > 0 &&
num[kK10] ==
num[kK10Bar] ) ||
3354 (
num[kUFVPlus] == 1 &&
num[kUFVMinus] == 1 )
3358 log << MSG::DEBUG <<
" [ Self-conjugate mixed-CP ]" << endmsg;
3360 if ( RandFlat::shoot() > 0.5 )
3362 if ( RandFlat::shoot() > 0.5 )
3364 decay_mode = kCPPlus;
3372 decay_mode = kCPMinus;
3387 if ( charm == -1 ) { cutoff = 1. - cutoff; }
3389 log << MSG::DEBUG <<
" [ cutoff = " << cutoff <<
" ]" << endmsg;
3391 decay_mode = ( RandFlat::shoot() > cutoff ) ? kFlavoredCF_0 : kFlavoredCFBar_0;
3393 if ( ( decay_mode == kFlavoredCF_0 && charm == 1 ) ||
3394 ( decay_mode == kFlavoredCFBar_0 && charm == -1 ) )
3398 r2D0 = sqrt( m_rCF_0 );
3405 r2D0 = 1. / sqrt( m_rCF_0 );
3414 if ( charm == -1 ) { cutoff = 1. - cutoff; }
3416 log << MSG::DEBUG <<
" [ cutoff = " << cutoff <<
" ]" << endmsg;
3418 decay_mode = ( RandFlat::shoot() > cutoff ) ? kFlavoredCS : kFlavoredCSBar;
3421 if ( ( decay_mode == kFlavoredCS && charm == 1 ) ||
3422 ( decay_mode == kFlavoredCSBar && charm == -1 ) )
3424 r2D0 = sqrt( m_rCS );
3429 r2D0 = 1. / sqrt( m_rCS );
3437 if (
num[kUnknown] >= 1 )
3439 cout <<
"decay mode " << decay_mode << endl;
3440 cout <<
"D #" << charm << endl;
3441 cout <<
"pi+: " <<
num[kPiPlus] << endl;
3442 cout <<
"pi-: " <<
num[kPiMinus] << endl;
3443 cout <<
"pi0: " <<
num[kPi0] << endl;
3444 cout <<
"eta: " <<
num[kEta] << endl;
3445 cout <<
"eta': " <<
num[kEtaPrime] << endl;
3446 cout <<
"f0/a0: " <<
num[kNeutralScalar] << endl;
3447 cout <<
"UFV+: " <<
num[kUFVPlus] << endl;
3448 cout <<
"UFV-: " <<
num[kUFVMinus] << endl;
3449 cout <<
"rho0: " <<
num[kRho0] << endl;
3450 cout <<
"omega: " <<
num[kOmega] << endl;
3451 cout <<
"phi: " <<
num[kPhi] << endl;
3452 cout <<
"K+: " <<
num[kKPlus] << endl;
3453 cout <<
"K-: " <<
num[kKMinus] << endl;
3454 cout <<
"K0S: " <<
num[kK0S] << endl;
3455 cout <<
"K0L: " <<
num[kK0L] << endl;
3456 cout <<
"FV+: " <<
num[kFVPlus] << endl;
3457 cout <<
"FV-: " <<
num[kFVMinus] << endl;
3458 cout <<
"K*0: " <<
num[kKStar0] << endl;
3459 cout <<
"K*0b: " <<
num[kKStar0Bar] << endl;
3460 cout <<
"K10: " <<
num[kK10] << endl;
3461 cout <<
"K10b: " <<
num[kK10Bar] << endl;
3462 cout <<
"l+: " <<
num[kLeptonPlus] << endl;
3463 cout <<
"l-: " <<
num[kLeptonMinus] << endl;
3464 cout <<
"nu: " <<
num[kNeutrino] << endl;
3465 cout <<
"gamma: " <<
num[kGamma] << endl;
3466 cout <<
"Unknown: " <<
num[25] << endl;
3469 d0_info[0] = decay_mode;
3471 d0_info[2] = deltaD0;
3474 d0_info[5] = mnm_gen;
3475 d0_info[6] = mpn_gen;
3476 d0_info[7] = double( isKsPiPi );
3477 d0_info[8] = mpm_gen;