349 int fsq_pdgId = -999 ;
357 unsigned int nParents = 0 ;
359 bool hasAncestor = false ;
360 bool hasProton = false ;
368 std::vector <const xAOD::TruthParticle*>
ME ;
369 std::vector <const xAOD::TruthParticle*>
PDF ;
371 std::map< int, std::vector <const xAOD::TruthParticle*> > xME ;
372 std::map< int, std::vector <const xAOD::TruthParticle*> > xPDF ;
374 std::map< int, std::vector <const xAOD::TruthParticle*> > MPI ;
375 std::map< int, std::vector <const xAOD::TruthParticle*> > GS ;
376 std::map< int, std::vector <const xAOD::TruthParticle*> > ME_PDF ;
377 std::map< int, std::vector <const xAOD::TruthParticle*> > UFO ;
386 std::map<std::string, bool> tipo ;
391 for (
const auto& fsQuarks: fsQuarksMap ) {
392 fsq_pdgId = fsQuarks.first ;
393 for (
const auto& bcQuark: fsQuarks.second) {
394 fsq_status = bcQuark->
status() ;
395 if (fsq_status == 3) {
396 if ( bcQuark->nChildren() == 0 ) {
398 ME.push_back(bcQuark) ;
400 for (
unsigned int i=0;
i<bcQuark->nParents();
i++) {
404 if ( (father->
absPdgId() == fsq_pdgId) && (father->
status() == 3) ) {
405 PDF.push_back(father) ;
411 PDF.push_back(bcQuark) ;
419 for (
const auto& fsQuarks: fsQuarksMap ) {
420 fsq_pdgId = fsQuarks.first ;
421 for (
const auto& bcQuark: fsQuarks.second) {
422 fsq_status = bcQuark->status() ;
423 if (fsq_status != 3) {
432 while (hasAncestor) {
445 if ( nParents != 0 ) {
447 ancestor = ancestor->
parent(0) ;
450 else hasAncestor = false ;
454 if ( tipo[
"orphan"] or tipo[
"cFromb"] or tipo[
"bFromb"] ) {
455 hasAncestor = false ;
458 hasProton |= tipo[
"proton"] ;
463 if ( (
level == 1) & hasProton ) {
465 MPI[fsq_pdgId].push_back(bcQuark) ;
467 if ( (
level == 2) & hasProton ) {
468 if ( (
ME.size() +
PDF.size()) == 0 ) {
470 GS[fsq_pdgId].push_back(bcQuark) ;
474 ME_PDF[fsq_pdgId].push_back(bcQuark) ;
477 prodVtx = bcQuark->prodVtx() ;
478 pdgId = bcQuark->pdgId() ;
480 bc34 = ( (vtxBarcode == -3) | (vtxBarcode == -4) ) ;
486 while (hasAncestor) {
489 for (
unsigned int npp=0; npp<nParents; npp++) {
490 ancestor = ancestor->
parent(npp) ;
491 prodVtx = ancestor->
prodVtx() ;
493 bc34 = ( (vtxBarcode == -3) | (vtxBarcode == -4) ) & (ancestor->
pdgId() ==
pdgId) ;
494 if (bc34) pvtx34 = prodVtx ;
497 else hasAncestor = false ;
505 if ( (
part->prodVtx() == pvtx34 ) && (
part->pdgId() == -
pdgId) ) {
506 xPDF[fsq_pdgId].push_back(bcQuark) ;
513 for (
auto&
part: ME) {
515 nParents =
part->nParents() ;
516 for (
unsigned int i=0;
i<nParents;
i++) {
517 father =
part->parent(
i) ;
519 xME[fsq_pdgId].push_back(bcQuark) ;
527 GS[fsq_pdgId].push_back(bcQuark) ;
532 UFO[fsq_pdgId].push_back(bcQuark) ;
538 if (
PDF.size() != xPDF[fsq_pdgId].size()) {
558 std::cout<<
"m_qq.size = "<<
m_qq.size()<<endl;
559 std::cout<<
"PDF n = "<<
PDF.size()<<std::endl;
560 for(
auto &
i :
PDF) std::cout<<
i<<std::endl;
561 std::cout<<
"ME n = "<<
ME.size()<<std::endl;
562 for(
auto &
i : ME) std::cout<<
i<<std::endl;
563 std::cout<<
"GS n = "<<GS.size()<<std::endl;
564 for (
const auto& gs_item : GS){
565 std::cout<<
"GS item i = "<<gs_item.first<<std::endl;
566 for(
const auto &
i : gs_item.second) std::cout<<
i<<std::endl;
569 std::cout<<
"xPDF n = "<<xPDF.size()<<std::endl;
570 for (
const auto& xPDF_item : xPDF){
571 std::cout<<
"xPDF item i = "<<xPDF_item.first<<std::endl;
572 for(
const auto &
i : xPDF_item.second) std::cout<<
i<<std::endl;
575 std::cout<<
"xME n = "<<xME.size()<<std::endl;
576 for (
const auto& xME_item : xME){
577 std::cout<<
"xME item i = "<<xME_item.first<<std::endl;
578 for(
const auto &
i : xME_item.second) std::cout<<
i<<std::endl;
581 std::cout<<
"MPI n = "<<MPI.size()<<std::endl;
582 for (
const auto& mpi_item : MPI){
583 std::cout<<
"MPI item i = "<<mpi_item.first<<std::endl;
584 for(
const auto &
i : mpi_item.second) std::cout<<
i<<std::endl;
586 std::cout<<
"ME_PDF n = "<<ME_PDF.size()<<std::endl;
587 for (
const auto& ME_PDF_item : ME_PDF){
588 std::cout<<
"ME_PDF item i = "<<ME_PDF_item.first<<std::endl;
589 for(
const auto &
i : ME_PDF_item.second) std::cout<<
i<<std::endl;
592 std::cout<<
"UFO n = "<<UFO.size()<<std::endl;
593 for (
const auto& UFO_item : UFO){
594 std::cout<<
"UFO item i = "<<UFO_item.first<<std::endl;
595 for(
const auto &
i : UFO_item.second) std::cout<<
i<<std::endl;