File indexing completed on 2024-04-06 11:57:31
0001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0002 #include "AnalysisDataFormats/TopObjects/interface/TtFullHadronicEvent.h"
0003 #include "AnalysisDataFormats/TopObjects/interface/TtFullHadEvtPartons.h"
0004
0005 #include "printParticle.h"
0006 using ttevent::printParticle;
0007
0008
0009 void TtFullHadronicEvent::print(const int verbosity) const {
0010 if (verbosity % 10 <= 0)
0011 return;
0012
0013 edm::LogInfo log("TtFullHadronicEvent");
0014
0015 log << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n";
0016
0017
0018 if (!genEvt_)
0019 log << " TtGenEvent not available! \n";
0020 else {
0021 log << " TtGenEvent says: ";
0022 if (!this->genEvent()->isTtBar())
0023 log << "Not TtBar";
0024 else if (this->genEvent()->isFullHadronic())
0025 log << "Fully Hadronic TtBar";
0026 else if (this->genEvent()->isSemiLeptonic())
0027 log << "Semi-leptonic TtBar";
0028 else if (this->genEvent()->isFullLeptonic())
0029 log << "Fully Leptonic TtBar";
0030 log << "\n";
0031 }
0032
0033 log << " Number of available event hypothesis classes: " << this->numberOfAvailableHypoClasses() << " \n";
0034
0035
0036 log << " - JetCombi : ";
0037 for (unsigned idx = 0; idx < 6; idx++) {
0038 switch (idx) {
0039 case TtFullHadEvtPartons::LightQ:
0040 log << " LightQ ";
0041 break;
0042 case TtFullHadEvtPartons::LightQBar:
0043 log << " LightQBar";
0044 break;
0045 case TtFullHadEvtPartons::B:
0046 log << " B ";
0047 break;
0048 case TtFullHadEvtPartons::LightP:
0049 log << " LightP ";
0050 break;
0051 case TtFullHadEvtPartons::LightPBar:
0052 log << " LightPBar";
0053 break;
0054 case TtFullHadEvtPartons::BBar:
0055 log << " BBar ";
0056 break;
0057 }
0058 }
0059 log << "\n";
0060
0061
0062 typedef std::map<HypoClassKey, std::vector<HypoCombPair> >::const_iterator EventHypo;
0063 for (EventHypo hyp = evtHyp_.begin(); hyp != evtHyp_.end(); ++hyp) {
0064 HypoClassKey hypKey = (*hyp).first;
0065
0066 log << "---------------------------------------------------------------------------- \n";
0067 switch (hypKey) {
0068 case kGeom:
0069 log << " Geom not (yet) applicable to TtFullHadronicEvent --> skipping";
0070 continue;
0071 case kWMassMaxSumPt:
0072 log << " WMassMaxSumPt not (yet) applicable to TtFullHadronicEvent --> skipping";
0073 continue;
0074 case kMaxSumPtWMass:
0075 log << " MaxSumPtWMass not (yet) applicable to TtFullHadronicEvent --> skipping";
0076 continue;
0077 case kGenMatch:
0078 log << " GenMatch";
0079 break;
0080 case kMVADisc:
0081 log << " MVADisc not (yet) applicable to TtFullHadronicEvent --> skipping";
0082 continue;
0083 case kKinFit:
0084 log << " KinFit";
0085 break;
0086 case kKinSolution:
0087 log << " KinSolution not (yet) applicable to TtFullHadronicEvent --> skipping";
0088 continue;
0089 case kWMassDeltaTopMass:
0090 log << " WMassDeltaTopMass not (yet) applicable to TtFullHadronicEvent --> skipping";
0091 continue;
0092 case kHitFit:
0093 log << " HitFit not (yet) applicable to TtFullHadronicEvent --> skipping";
0094 continue;
0095 default:
0096 log << " Unknown TtEvent::HypoClassKey provided --> skipping";
0097 continue;
0098 }
0099 log << "-Hypothesis: \n";
0100 unsigned nOfHyp = this->numberOfAvailableHypos(hypKey);
0101 if (nOfHyp > 1) {
0102 log << " * Number of available jet combinations: " << nOfHyp << " \n";
0103 if (verbosity < 10)
0104 log << " The following was found to be the best one: \n";
0105 }
0106
0107 if (verbosity < 10)
0108 nOfHyp = 1;
0109 for (unsigned cmb = 0; cmb < nOfHyp; ++cmb) {
0110
0111 if (!this->isHypoValid(hypKey, cmb))
0112 log << " * Not valid! \n";
0113
0114 else {
0115
0116 log << " * JetCombi :";
0117 std::vector<int> jets = this->jetLeptonCombination(hypKey, cmb);
0118 for (unsigned int iJet = 0; iJet < jets.size(); iJet++) {
0119 log << " " << jets[iJet] << " ";
0120 }
0121 log << "\n";
0122
0123 switch (hypKey) {
0124 case kGenMatch:
0125 log << " * Sum(DeltaR) : " << this->genMatchSumDR(cmb) << " \n"
0126 << " * Sum(DeltaPt): " << this->genMatchSumPt(cmb) << " \n";
0127 break;
0128 case kKinFit:
0129 log << " * Chi^2 : " << this->fitChi2(cmb) << " \n"
0130 << " * Prob(Chi^2) : " << this->fitProb(cmb) << " \n";
0131 break;
0132 default:
0133 break;
0134 }
0135
0136 if (verbosity % 10 >= 2) {
0137 log << " * Candidates (pt; eta; phi; mass) :\n";
0138 if (verbosity % 10 >= 3)
0139 printParticle(log, "top pair", this->topPair(hypKey, cmb));
0140 printParticle(log, "top ", this->top(hypKey, cmb));
0141 printParticle(log, "W plus ", this->wPlus(hypKey, cmb));
0142 if (verbosity % 10 >= 3) {
0143 printParticle(log, "b ", this->b(hypKey, cmb));
0144 printParticle(log, "lightQ ", this->lightQ(hypKey, cmb));
0145 printParticle(log, "lightQBar ", this->lightQBar(hypKey, cmb));
0146 }
0147 printParticle(log, "topBar ", this->topBar(hypKey, cmb));
0148 printParticle(log, "W minus ", this->wMinus(hypKey, cmb));
0149 if (verbosity % 10 >= 3) {
0150 printParticle(log, "bBar ", this->bBar(hypKey, cmb));
0151 printParticle(log, "lightP ", this->lightP(hypKey, cmb));
0152 printParticle(log, "lightPBar ", this->lightPBar(hypKey, cmb));
0153 }
0154 }
0155 }
0156 }
0157 }
0158 log << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
0159 }