28 #pragma GCC diagnostic push
29 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
30 #include <HepMC/GenEvent.h>
31 #include <HepMC/GenVertex.h>
32 #pragma GCC diagnostic pop
34 #include <HepMC/GenParticle.h>
35 #include <HepMC/IteratorRange.h>
36 #include <HepMC/SimpleVector.h>
38 #include <TDatabasePDG.h>
48 int listOfResonantPIDs[] = {111, 113, 213, 333, 310, 311, 313, 323, 413, 423, 513, 523, 441, 443, 100443, 9000111, 9000211, 100111, 100211, 10111,
49 10211, 9010111, 9010211, 10113, 10213, 20113, 20213, 9000113, 9000213, 100113, 100213, 9010113, 9010213, 9020113, 9020213,
50 30113, 30213, 9030113, 9030213, 9040113, 9040213, 115, 215, 10115, 10215, 9000115, 9000215, 9010115, 9010215, 117, 217,
51 9000117, 9000217, 9010117, 9010217, 119, 219, 221, 331, 9000221, 9010221, 100221, 10221, 9020221, 100331, 9030221, 10331,
52 9040221, 9050221, 9060221, 9070221, 9080221, 223, 10223, 20223, 10333, 20333, 1000223, 9000223, 9010223, 30223, 100333, 225,
53 9000225, 335, 9010225, 9020225, 10225, 9030225, 10335, 9040225, 9050225, 9060225, 9070225, 9080225, 9090225, 227, 337, 229,
54 9000229, 9010229, 9000311, 9000321, 10311, 10321, 100311, 100321, 9010311, 9010321, 9020311, 9020321, 10313, 10323, 20313,
55 20323, 100313, 100323, 9000313, 9000323, 30313, 30323, 315, 325, 9000315, 9000325, 10315, 10325, 20315, 20325, 9010315,
56 9010325, 9020315, 9020325, 317, 327, 9010317, 9010327, 319, 329, 9000319, 9000329, 10411, 10421, 10413, 10423, 20413, 20423,
57 415, 425, 431, 10431, 433, 10433, 20433, 435, 10511, 10521, 10513, 10523, 20513, 20523, 515, 525, 10531, 533, 10533, 20533, 535,
58 10541, 543, 10543, 20543, 545, 10441, 100441, 10443, 20443, 30443, 9000443, 9010443, 9020443, 445, 100445, 551, 10551, 100551,
59 110551, 200551, 210551, 10553, 20553, 30553, 110553, 120553, 130553, 210553, 220553, 9000553, 9010553, 555, 10555, 20555, 100555,
60 110555, 120555, 200555, 557, 100557, 2224, 2214, 2114, 1114, 3212, 3224, 3214, 3114, 3324, 3314, 4222, 4212, 4112, 4224, 4214,
61 4114, 4232, 4132, 4322, 4312, 4324, 4314, 4332, 4334, 4412, 4422, 4414, 4424, 4432, 4434, 4444};
79 std::cout <<
"DecayFinder name: " <<
Name() << std::endl;
90 return canSearchDecay;
106 std::cout <<
"The decay, " <<
m_decayDescriptor <<
" was not found or reconstructable in this event, skipping" << std::endl;
135 bool ddCanBeParsed =
true;
137 size_t daughterLocator;
143 int mother_charge = 0;
144 std::vector<int> intermediates_charge;
145 std::vector<int> daughters_charge;
153 std::string specialTracks[] = {
"e",
"mu",
"pi",
"K"};
159 while ((pos = manipulateDecayDescriptor.find(
' ')) != std::string::npos)
161 manipulateDecayDescriptor.replace(pos, 1,
"");
165 std::string checkForCC = manipulateDecayDescriptor.substr(0, 1) + manipulateDecayDescriptor.substr(manipulateDecayDescriptor.size() - 3, 3);
166 std::for_each(checkForCC.begin(), checkForCC.end(), [](
char&
c)
167 {
c = ::toupper(
c); });
170 if (checkForCC ==
"[]CC")
172 manipulateDecayDescriptor = manipulateDecayDescriptor.substr(1, manipulateDecayDescriptor.size() - 4);
177 size_t findMotherEndPoint = manipulateDecayDescriptor.find(decayArrow);
178 mother = manipulateDecayDescriptor.substr(0, findMotherEndPoint);
185 ddCanBeParsed =
false;
187 manipulateDecayDescriptor.erase(0, findMotherEndPoint + decayArrow.length());
190 while ((pos = manipulateDecayDescriptor.find(startIntermediate)) != std::string::npos)
192 size_t findIntermediateStartPoint = manipulateDecayDescriptor.find(startIntermediate, pos);
193 size_t findIntermediateEndPoint = manipulateDecayDescriptor.find(endIntermediate, pos);
194 std::string intermediateDecay = manipulateDecayDescriptor.substr(pos + 1, findIntermediateEndPoint - (pos + 1));
196 intermediate = intermediateDecay.substr(0, intermediateDecay.find(decayArrow));
203 ddCanBeParsed =
false;
208 intermediateDecay.erase(0, intermediateDecay.find(decayArrow) + decayArrow.length());
209 while ((daughterLocator = intermediateDecay.find(chargeIndicator)) != std::string::npos)
211 daughter = intermediateDecay.substr(0, daughterLocator);
212 std::string daughterChargeString = intermediateDecay.substr(daughterLocator + 1, 1);
215 daughter += daughterChargeString;
220 daughters_charge.push_back(
get_charge(daughter));
224 ddCanBeParsed =
false;
226 intermediateDecay.erase(0, daughterLocator + 2);
229 manipulateDecayDescriptor.erase(findIntermediateStartPoint, findIntermediateEndPoint + 1 - findIntermediateStartPoint);
235 while ((daughterLocator = manipulateDecayDescriptor.find(chargeIndicator)) != std::string::npos)
237 daughter = manipulateDecayDescriptor.substr(0, daughterLocator);
238 std::string daughterChargeString = manipulateDecayDescriptor.substr(daughterLocator + 1, 1);
241 daughter += daughterChargeString;
246 daughters_charge.push_back(
get_charge(daughter));
250 ddCanBeParsed =
false;
252 manipulateDecayDescriptor.erase(0, daughterLocator + 2);
256 unsigned int trackStart = 0;
257 unsigned int trackEnd = 0;
260 trackStart = trackEnd;
265 for (
unsigned int j = trackStart;
j < trackEnd; ++
j)
267 vtxCharge += daughters_charge[
j];
270 intermediates_charge.push_back(vtxCharge);
275 mother_charge += daughters_charge[
i];
297 std::cout <<
"Your decay descriptor can be parsed" << std::endl;
305 std::cout <<
"Your decay descriptor cannot be parsed, " <<
Name() <<
" will not be registered" << std::endl;
319 bool decayWasFound =
false;
320 bool reconstructableDecayWasFound =
false;
321 bool aTrackFailedPT =
false;
322 bool aTrackFailedETA =
false;
323 bool aMotherHasPhoton =
false;
324 bool aMotherHasPi0 =
false;
325 std::vector<int> correctMotherProducts;
326 std::vector<int> positive_motherDecayProducts;
336 positive_motherDecayProducts.push_back(std::abs(m_motherDecayProduct));
339 m_truthinfo = findNode::getClass<PHG4TruthInfoContainer>(topNode,
"G4TruthInfo");
342 std::cout <<
"DecayFinder: Missing node G4TruthInfo" << std::endl;
345 m_geneventmap = findNode::getClass<PHHepMCGenEventMap>(topNode,
"PHHepMCGenEventMap");
348 std::cout <<
"DecayFinder: Missing node PHHepMCGenEventMap" << std::endl;
353 std::cout <<
"You have neither the PHHepMCGenEventMap or G4TruthInfo nodes" << std::endl;
354 std::cout <<
"DecayFinder will crash, exiting now!" << std::endl;
362 std::cout <<
"You have a valid G4TruthInfo but no PHHepMCGenEventMap container" << std::endl;
363 std::cout <<
"You are probably using a particle gun" << std::endl;
375 std::cout <<
"parent->pdg_id(): " << g4particle->
get_pid() << std::endl;
378 bool breakOut =
false;
379 correctMotherProducts.clear();
383 searchGeant4Record(g4particle->
get_barcode(), g4particle->
get_pid(), positive_motherDecayProducts, breakOut, aMotherHasPhoton, aMotherHasPi0, aTrackFailedPT, aTrackFailedETA, correctMotherProducts);
390 decayWasFound =
compareDecays(m_motherDecayProducts, correctMotherProducts);
395 if (aTrackFailedPT && !aTrackFailedETA)
399 else if (!aTrackFailedPT && aTrackFailedETA)
403 else if (aTrackFailedPT && aTrackFailedETA)
410 reconstructableDecayWasFound =
true;
415 if (aMotherHasPhoton && !aMotherHasPi0)
419 else if (!aMotherHasPhoton && aMotherHasPi0)
423 else if (aMotherHasPhoton && aMotherHasPi0)
435 return reconstructableDecayWasFound;
444 std::cout <<
"DecayFinder: Missing node PHHepMCGenEvent" << std::endl;
450 for (HepMC::GenEvent::particle_const_iterator
p = theEvent->particles_begin();
p != theEvent->particles_end(); ++
p)
457 std::cout <<
"parent->pdg_id(): " << (*p)->pdg_id() << std::endl;
460 bool breakOut =
false;
461 correctMotherProducts.clear();
466 if (!(*p)->end_vertex())
468 searchGeant4Record((*p)->barcode(), (*p)->pdg_id(), positive_motherDecayProducts, breakOut, aMotherHasPhoton, aMotherHasPi0, aTrackFailedPT, aTrackFailedETA, correctMotherProducts);
472 searchHepMCRecord((*
p), positive_motherDecayProducts, breakOut, aMotherHasPhoton, aMotherHasPi0, aTrackFailedPT, aTrackFailedETA, correctMotherProducts);
480 decayWasFound =
compareDecays(m_motherDecayProducts, correctMotherProducts);
485 if (aTrackFailedPT && !aTrackFailedETA)
489 else if (!aTrackFailedPT && aTrackFailedETA)
493 else if (aTrackFailedPT && aTrackFailedETA)
500 reconstructableDecayWasFound =
true;
505 if (aMotherHasPhoton && !aMotherHasPi0)
509 else if (!aMotherHasPhoton && aMotherHasPi0)
513 else if (aMotherHasPhoton && aMotherHasPi0)
527 return reconstructableDecayWasFound;
535 bool& breakLoop,
bool& hasPhoton,
bool& hasPi0,
bool& failedPT,
bool& failedETA,
536 std::vector<int>& actualDecayProducts)
538 for (HepMC::GenVertex::particle_iterator children = particle->end_vertex()->particles_begin(HepMC::children);
539 children != particle->end_vertex()->particles_end(HepMC::children); ++children)
543 std::cout <<
"--children->pdg_id(): " << (*children)->pdg_id() << std::endl;
546 if ((*children)->pdg_id() == 22)
550 if ((*children)->pdg_id() == 111)
561 if (std::find(decayProducts.begin(), decayProducts.end(),
562 std::abs((*children)->pdg_id())) != decayProducts.end())
566 std::cout <<
"This is a child you were looking for" << std::endl;
569 std::vector<int> positive_intermediates_ID;
572 positive_intermediates_ID.push_back(abs(
i));
575 if (!(*children)->end_vertex() && std::find(positive_intermediates_ID.begin(), positive_intermediates_ID.end(),
576 abs((*children)->pdg_id())) != positive_intermediates_ID.end())
578 std::vector<int> requiredIntermediateDecayProducts;
579 std::vector<int> positive_requiredIntermediateDecayProducts;
580 std::vector<int> actualIntermediateDecayProducts;
582 auto it = std::find(positive_intermediates_ID.begin(), positive_intermediates_ID.end(), abs((*children)->pdg_id()));
585 unsigned int trackStart = 0, trackStop = 0;
598 for (
unsigned int i = trackStart;
i < trackStop; ++
i)
601 positive_requiredIntermediateDecayProducts.push_back(abs(
m_daughters_ID[i]));
604 searchGeant4Record((*children)->barcode(), (*children)->pdg_id(), positive_requiredIntermediateDecayProducts,
605 breakLoop, hasPhoton, hasPi0, failedPT, failedETA, actualIntermediateDecayProducts);
607 bool needThisParticle =
compareDecays(requiredIntermediateDecayProducts, actualIntermediateDecayProducts);
608 if (needThisParticle)
610 actualDecayProducts.push_back((*children)->pdg_id());
624 if (needThisParticle)
626 actualDecayProducts.push_back((*children)->pdg_id());
636 std::cout <<
"This is a resonance to investigate further" << std::endl;
638 if (!(*children)->end_vertex())
641 breakLoop, hasPhoton, hasPi0, failedPT, failedETA, actualDecayProducts);
645 for (HepMC::GenVertex::particle_iterator grandchildren = (*children)->end_vertex()->particles_begin(HepMC::children);
646 grandchildren != (*children)->end_vertex()->particles_end(HepMC::children); ++grandchildren)
649 if (needThisParticle)
651 actualDecayProducts.push_back((*grandchildren)->pdg_id());
669 void DecayFinder::searchGeant4Record(
int barcode,
int pid, std::vector<int> decayProducts,
bool& breakLoop,
bool& hasPhoton,
bool& hasPi0,
bool& failedPT,
bool& failedETA, std::vector<int>& actualDecayProducts)
692 int particleID = g4particle->
get_pid();
695 std::cout <<
"--children->pdg_id(): " << particleID << std::endl;
697 if (particleID == 22)
701 if (particleID == 111)
712 if (std::find(decayProducts.begin(), decayProducts.end(),
713 std::abs(particleID)) != decayProducts.end())
716 if (needThisParticle)
720 std::cout <<
"This is a child you were looking for" << std::endl;
722 actualDecayProducts.push_back(particleID);
724 decayChain.push_back(std::make_pair(std::make_pair(embedding_id, g4particle->
get_barcode()), particleID));
736 std::cout <<
"This is a resonance to investigate further" << std::endl;
739 breakLoop, hasPhoton, hasPi0, failedPT, failedETA, actualDecayProducts);
755 bool acceptParticle =
false;
757 std::vector<int> positive_intermediates_ID;
760 positive_intermediates_ID.push_back(abs(
i));
764 if (std::find(positive_intermediates_ID.begin(), positive_intermediates_ID.end(),
765 abs(particle->pdg_id())) != positive_intermediates_ID.end())
767 std::vector<int> requiredIntermediateDecayProducts;
768 std::vector<int> actualIntermediateDecayProducts;
770 auto it = std::find(positive_intermediates_ID.begin(), positive_intermediates_ID.end(), abs(particle->pdg_id()));
773 unsigned int trackStart = 0, trackStop = 0;
787 for (
unsigned int i = trackStart;
i < trackStop; ++
i)
792 for (HepMC::GenVertex::particle_iterator grandchildren = particle->end_vertex()->particles_begin(HepMC::children);
793 grandchildren != particle->end_vertex()->particles_end(HepMC::children); ++grandchildren)
797 std::cout <<
"----grandchildren->pdg_id(): " << (*grandchildren)->pdg_id() << std::endl;
803 for (HepMC::GenVertex::particle_iterator greatgrandchildren = (*grandchildren)->end_vertex()->particles_begin(HepMC::children);
804 greatgrandchildren != (*grandchildren)->end_vertex()->particles_end(HepMC::children); ++greatgrandchildren)
808 std::cout <<
"--------greatgrandchildren->pdg_id(): " << (*greatgrandchildren)->pdg_id() << std::endl;
811 if ((
m_allowPhotons && (*greatgrandchildren)->pdg_id() == 22) || (
m_allowPi0 && (*greatgrandchildren)->pdg_id() == 111))
815 else if ((!
m_allowPhotons && (*greatgrandchildren)->pdg_id() == 22) || (!
m_allowPi0 && (*greatgrandchildren)->pdg_id() == 111))
821 actualIntermediateDecayProducts.push_back((*greatgrandchildren)->pdg_id());
825 HepMC::FourVector myFourVector = (*greatgrandchildren)->momentum();
827 HepMC::GenVertex* thisVtx = (*greatgrandchildren)->production_vertex();
828 double vtxPos[3] = {thisVtx->point3d().x(), thisVtx->point3d().y(), thisVtx->point3d().z()};
836 trackFailedPT =
true;
840 trackFailedETA =
true;
845 std::cout <<
"pT = " << myFourVector.perp() <<
", eta = " << myFourVector.eta() << std::endl;
846 std::string ptPass = trackFailedPT ?
"passed" :
"failed";
847 std::string etaPass = trackFailedETA ?
"passed" :
"failed";
848 std::cout <<
"The track " << ptPass <<
" the pT requirement, the track " << etaPass <<
" the eta requirement." << std::endl;
857 else if ((!
m_allowPhotons && (*grandchildren)->pdg_id() == 22) || (!
m_allowPi0 && (*grandchildren)->pdg_id() == 111))
863 actualIntermediateDecayProducts.push_back((*grandchildren)->pdg_id());
867 HepMC::FourVector myFourVector = (*grandchildren)->momentum();
869 HepMC::GenVertex* thisVtx = (*grandchildren)->production_vertex();
870 double vtxPos[3] = {thisVtx->point3d().x(), thisVtx->point3d().y(), thisVtx->point3d().z()};
878 trackFailedPT =
true;
882 trackFailedETA =
true;
887 std::cout <<
"pT = " << myFourVector.perp() <<
", eta = " << myFourVector.eta() << std::endl;
888 std::string ptPass = trackFailedPT ?
"passed" :
"failed";
889 std::string etaPass = trackFailedETA ?
"passed" :
"failed";
890 std::cout <<
"The track " << ptPass <<
" the pT requirement, the track " << etaPass <<
" the eta requirement." << std::endl;
895 acceptParticle =
compareDecays(requiredIntermediateDecayProducts, actualIntermediateDecayProducts);
897 else if ((particle->pdg_id() == 22) || (particle->pdg_id() == 111))
905 std::cout <<
"This is a final state track" << std::endl;
907 const HepMC::FourVector& myFourVector = particle->momentum();
909 HepMC::GenVertex* thisVtx = particle->production_vertex();
910 double vtxPos[3] = {thisVtx->point3d().x(), thisVtx->point3d().y(), thisVtx->point3d().z()};
918 trackFailedPT =
true;
922 trackFailedETA =
true;
927 std::cout <<
"pT = " << myFourVector.perp() <<
", eta = " << myFourVector.eta() << std::endl;
928 std::string ptPass = trackFailedPT ?
"passed" :
"failed";
929 std::string etaPass = trackFailedETA ?
"passed" :
"failed";
930 std::cout <<
"The track " << ptPass <<
" the pT requirement, the track " << etaPass <<
" the eta requirement." << std::endl;
932 acceptParticle =
true;
935 return acceptParticle;
943 bool acceptParticle =
false;
945 std::vector<int> positive_intermediates_ID;
948 positive_intermediates_ID.push_back(abs(
i));
951 if (std::find(positive_intermediates_ID.begin(), positive_intermediates_ID.end(),
952 abs(particle->
get_pid())) != positive_intermediates_ID.end())
954 std::vector<int> requiredIntermediateDecayProducts;
955 std::vector<int> actualIntermediateDecayProducts;
957 auto it = std::find(positive_intermediates_ID.begin(), positive_intermediates_ID.end(), abs(particle->
get_pid()));
960 unsigned int trackStart = 0, trackStop = 0;
974 std::vector<int> positive_intermediateDecayProducts;
975 for (
unsigned int i = trackStart;
i < trackStop; ++
i)
981 bool fakeBreak =
false;
983 hasPhoton, hasPi0, trackFailedPT, trackFailedETA, actualIntermediateDecayProducts);
985 acceptParticle =
compareDecays(requiredIntermediateDecayProducts, actualIntermediateDecayProducts);
987 else if ((particle->
get_pid() == 22) || (particle->
get_pid() == 111))
995 std::cout <<
"This is a final state track" << std::endl;
997 double px = particle->
get_px();
998 double py = particle->
get_py();
999 double pz = particle->
get_pz();
1001 double pt = std::sqrt(std::pow(px, 2) + std::pow(py, 2));
1002 double p = std::sqrt(std::pow(px, 2) + std::pow(py, 2) + std::pow(pz, 2));
1003 double eta = 0.5 * std::log((p + pz) / (p - pz));
1006 double vtxPos[3] = {thisVtx->
get_x(), thisVtx->
get_y(), thisVtx->
get_z()};
1014 trackFailedPT =
true;
1018 trackFailedETA =
true;
1023 std::cout <<
"pT = " << pt <<
", eta = " << eta << std::endl;
1024 std::string ptPass = trackFailedPT ?
"passed" :
"failed";
1025 std::string etaPass = trackFailedETA ?
"passed" :
"failed";
1026 std::cout <<
"The track " << ptPass <<
" the pT requirement, the track " << etaPass <<
" the eta requirement." << std::endl;
1029 acceptParticle =
true;
1032 return acceptParticle;
1040 bool accept =
false;
1046 std::cout <<
"Printing required decay products: ";
1047 for (
int i : required)
1049 std::cout <<
i <<
", ";
1051 std::cout << std::endl;
1052 std::cout <<
"Printing actual decay products: ";
1053 for (
int i : actual)
1055 std::cout <<
i <<
", ";
1057 std::cout << std::endl;
1058 if (required == actual)
1060 std::cout <<
"*\n* These vectors match\n*\n"
1065 std::cout <<
"*\n* These vectors DONT match\n*\n"
1070 if (required == actual)
1078 if (required == actual)
1085 std::cout <<
"Checking CC state" << std::endl;
1086 if (required == actual)
1088 std::cout <<
"*\n* These vectors match\n*\n"
1093 std::cout <<
"*\n* These vectors DONT match\n*\n"
1109 for (i = 0; i <
n; i++)
1123 for (
int j = i;
j <
n;
j++)
1125 arr[
j] = arr[
j + 1];
1134 bool particleFound =
true;
1135 if (!TDatabasePDG::Instance()->GetParticle(particle.c_str()))
1139 std::cout <<
"The particle, " << particle <<
" is not in the TDatabasePDG particle list" << std::endl;
1141 particleFound =
false;
1144 return particleFound;
1159 return TDatabasePDG::Instance()->GetParticle(name.c_str())->PdgCode();
1171 return TDatabasePDG::Instance()->GetParticle(name.c_str())->Charge() / 3;
1181 return min <= value && value <= max;
1186 double r_sq = std::pow(
m_tpc_r, 2);
1187 double x_sq = std::pow(vertex[0], 2);
1189 effective_top_r = std::sqrt(r_sq - x_sq) - vertex[1];
1190 effective_bottom_r = std::sqrt(r_sq - x_sq) + vertex[1];
1197 double z_north =
m_tpc_z - vertex[2];
1198 double z_south =
m_tpc_z + vertex[2];
1205 double top_north_eta = -1 * std::log(tan(top_north_theta / 2));
1206 double bottom_north_eta = -1 * std::log(tan(bottom_north_theta / 2));
1207 double top_south_eta = std::log(tan(top_south_theta / 2));
1208 double bottom_south_eta = std::log(tan(bottom_south_theta / 2));
1223 std::cout <<
"DST node added" << std::endl;
1242 std::map<std::string, std::string> forbiddenStrings;
1243 forbiddenStrings[
"/"] = undrscr;
1244 forbiddenStrings[
"("] = undrscr;
1245 forbiddenStrings[
")"] = nothing;
1246 forbiddenStrings[
"+"] =
"plus";
1247 forbiddenStrings[
"-"] =
"minus";
1248 forbiddenStrings[
"*"] =
"star";
1249 forbiddenStrings[
" "] = nothing;
1250 for (
auto const& [badString, goodString] : forbiddenStrings)
1252 while ((pos = baseName.find(badString)) != std::string::npos)
1254 baseName.replace(pos, 1, goodString);
1262 lowerNode->
addNode(decayNode);
1263 std::cout <<
m_nodeName <<
" node added" << std::endl;
1276 std::cout <<
"\n---------------DecayFinder information---------------" << std::endl;
1277 std::cout <<
"Module name: " <<
Name() << std::endl;
1279 std::cout <<
"Number of generated decays: " <<
m_counter << std::endl;
1280 std::cout <<
" Number of decays that failed pT requirement: " <<
m_nCandFail_pT << std::endl;
1281 std::cout <<
" Number of decays that failed eta requirement: " <<
m_nCandFail_eta << std::endl;
1282 std::cout <<
" Number of decays that failed pT and eta requirements: " <<
m_nCandFail_pT_and_eta << std::endl;
1284 std::cout <<
" Number of reconstructable mothers with associated photon: " <<
m_nCandHas_Photon << std::endl;
1285 std::cout <<
" Number of reconstructable mothers with associated Pi0: " <<
m_nCandHas_Pi0 << std::endl;
1286 std::cout <<
" Number of reconstructable mothers with associated photon and Pi0: " <<
m_nCandHas_Photon_and_Pi0 << std::endl;
1288 std::cout <<
"-----------------------------------------------------\n";
1289 std::cout << std::endl;
1294 std::cout <<
"----------------";
1295 std::cout <<
" DecayFinderNode: " <<
m_nodeName <<
" information ";
1296 std::cout <<
"----------------" << std::endl;
1298 for (
auto& iter : *map)
1300 Decay decay = iter.second;
1301 for (
auto&
i : decay)
1303 std::cout <<
"Particle embedding ID: " <<
i.first.first <<
", particle barcode: " <<
i.first.second <<
", particle PDG ID: " <<
i.second << std::endl;
1306 std::cout <<
"--------------------------------------------------------------------------------------------------" << std::endl;