ATLAS Offline Software
CalcTthPartonHistory.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3  */
4 
8 
9 namespace top {
12 
14 
15  for (const xAOD::TruthParticle* particle : *truthParticles) {
16  if (particle->pdgId() != 25 || particle->nChildren() != 2) { // choose only H->xy
17  continue;
18  }
19  ttH.Higgs_p4 = particle->p4();
20 
22 
23  ttH.decay1_p4 = higgs.decay1_vector;
24  ttH.decay2_p4 = higgs.decay2_vector;
41 
42  return true;
43  }
44  return false;
45  }
46 
48  xAOD::PartonHistory* tthPartonHistory) {
49  tthPartonHistory->IniVarTth();
50 
51  TLorentzVector t_before, t_after, t_after_SC;
52  TLorentzVector Wp;
53  TLorentzVector b;
54  TLorentzVector WpDecay1;
55  TLorentzVector WpDecay2;
56  int WpDecay1_pdgId{};
57  int WpDecay2_pdgId{};
58 
59  bool event_top = CalcTopPartonHistory::topWb(truthParticles, 6, t_before, t_after, Wp, b, WpDecay1, WpDecay1_pdgId,
60  WpDecay2, WpDecay2_pdgId);
61  bool event_top_SC = CalcTopPartonHistory::topAfterFSR_SC(truthParticles, 6, t_after_SC);
62 
63  TLorentzVector tbar_before, tbar_after, tbar_after_SC;
64  TLorentzVector Wm;
65  TLorentzVector bbar;
66  TLorentzVector WmDecay1;
67  TLorentzVector WmDecay2;
68  int WmDecay1_pdgId{};
69  int WmDecay2_pdgId{};
70 
71  bool event_topbar = CalcTopPartonHistory::topWb(truthParticles, -6, tbar_before, tbar_after, Wm, bbar, WmDecay1,
72  WmDecay1_pdgId, WmDecay2, WmDecay2_pdgId);
73  bool event_topbar_SC = CalcTopPartonHistory::topAfterFSR_SC(truthParticles, -6, tbar_after_SC);
74 
75 
76  // coming from the tHq code
77  const bool event_Higgs = CalcTthPartonHistory::HiggsAndDecay(truthParticles);
78 
79  if(event_Higgs) {
80  // if our event has a higgs
81  if (event_top && event_topbar) {
82  // and we have a top and anti-top
83  TLorentzVector temp = t_before + tbar_before;
84  decorateWithMPtPhi(tthPartonHistory, "MC_ttbar_beforeFSR", temp);
85  fillEtaBranch(tthPartonHistory, "MC_ttbar_beforeFSR_eta", temp);
86 
87  temp = t_after + tbar_after;
88  decorateWithMPtPhi(tthPartonHistory, "MC_ttbar_afterFSR_beforeDecay", temp);
89  fillEtaBranch(tthPartonHistory, "MC_ttbar_afterFSR_beforeDecay_eta", temp);
90 
91  temp = WmDecay1 + WmDecay2 + b + WpDecay1 + WpDecay2 + bbar;
92  decorateWithMPtPhi(tthPartonHistory, "MC_ttbar_afterFSR", temp);
93  fillEtaBranch(tthPartonHistory, "MC_ttbar_afterFSR_eta", temp);
94 
95  //Higgs-Variables
96  decorateWithMPtPhi(tthPartonHistory,"MC_Higgs", ttH.Higgs_p4);
97  fillEtaBranch(tthPartonHistory, "MC_Higgs_eta", ttH.Higgs_p4);
98 
99  //Higgs-decay1-Variables
100  decorateWithMPtPhi(tthPartonHistory,"MC_Higgs_decay1", ttH.decay1_p4);
101  tthPartonHistory->auxdecor< int >("MC_Higgs_decay1_pdgId") = ttH.decay1_pdgId;
102  tthPartonHistory->auxdecor< int >("MC_Higgs_tau_decay1_isHadronic") = ttH.tau_decay1_isHadronic;
103  fillEtaBranch(tthPartonHistory, "MC_Higgs_decay1_eta", ttH.decay1_p4);
104 
105  //Higgs-decay2-Variables
106  decorateWithMPtPhi(tthPartonHistory,"MC_Higgs_decay2", ttH.decay2_p4);
107  tthPartonHistory->auxdecor< int >("MC_Higgs_decay2_pdgId") = ttH.decay2_pdgId;
108  tthPartonHistory->auxdecor< int >("MC_Higgs_tau_decay2_isHadronic") = ttH.tau_decay2_isHadronic;
109  fillEtaBranch(tthPartonHistory, "MC_Higgs_decay2_eta", ttH.decay2_p4);
110 
111  //Higgs-decay1- from decay1-Variables
112  decorateWithMPtPhi(tthPartonHistory,"MC_Higgs_decay1_from_decay1", ttH.decay1_from_decay1_p4);
113  tthPartonHistory->auxdecor< int >("MC_Higgs_decay1_from_decay1_pdgId") = ttH.decay1_from_decay1_pdgId;
114  tthPartonHistory->auxdecor< int >("MC_Higgs_tau_decay1_from_decay1_isHadronic") = ttH.tau_decay1_from_decay1_isHadronic;
115  fillEtaBranch(tthPartonHistory, "MC_Higgs_decay1_from_decay1_eta", ttH.decay1_from_decay1_p4);
116 
117  //Higgs-decay2- from decay1-Variables
118  decorateWithMPtPhi(tthPartonHistory,"MC_Higgs_decay2_from_decay1", ttH.decay2_from_decay1_p4);
119  tthPartonHistory->auxdecor< int >("MC_Higgs_decay2_from_decay1_pdgId") = ttH.decay2_from_decay1_pdgId;
120  tthPartonHistory->auxdecor< int >("MC_Higgs_tau_decay2_from_decay1_isHadronic") = ttH.tau_decay2_from_decay1_isHadronic;
121  fillEtaBranch(tthPartonHistory, "MC_Higgs_decay2_from_decay1_eta", ttH.decay2_from_decay1_p4);
122 
123  //Higgs-decay1- from decay2-Variables
124  decorateWithMPtPhi(tthPartonHistory,"MC_Higgs_decay1_from_decay2", ttH.decay1_from_decay2_p4);
125  tthPartonHistory->auxdecor< int >("MC_Higgs_decay1_from_decay2_pdgId") = ttH.decay1_from_decay2_pdgId;
126  tthPartonHistory->auxdecor< int >("MC_Higgs_tau_decay1_from_decay2_isHadronic") = ttH.tau_decay1_from_decay2_isHadronic;
127  fillEtaBranch(tthPartonHistory, "MC_Higgs_decay1_from_decay2_eta", ttH.decay1_from_decay2_p4);
128 
129  //Higgs-decay2- from decay2-Variables
130  decorateWithMPtPhi(tthPartonHistory,"MC_Higgs_decay2_from_decay2", ttH.decay2_from_decay2_p4);
131  tthPartonHistory->auxdecor< int >("MC_Higgs_decay2_from_decay2_pdgId") = ttH.decay2_from_decay2_pdgId;
132  tthPartonHistory->auxdecor< int >("MC_Higgs_tau_decay2_from_decay2_isHadronic") = ttH.tau_decay2_from_decay2_isHadronic;
133  fillEtaBranch(tthPartonHistory, "MC_Higgs_decay2_from_decay2_eta", ttH.decay2_from_decay2_p4);
134  }
135 
136  // top specific
137  if (event_top) {
138  decorateWithMPtPhi(tthPartonHistory, "MC_t_beforeFSR", t_before);
139  fillEtaBranch(tthPartonHistory, "MC_t_beforeFSR_eta", t_before);
140 
141  decorateWithMPtPhi(tthPartonHistory, "MC_t_afterFSR", t_after);
142  fillEtaBranch(tthPartonHistory, "MC_t_afterFSR_eta", t_after);
143  // top from status-codes specific
144  if (event_top_SC) {
145  decorateWithMPtPhi(tthPartonHistory, "MC_t_afterFSR_SC", t_after_SC);
146  fillEtaBranch(tthPartonHistory, "MC_t_afterFSR_SC_eta", t_after_SC);
147  }
148 
149  decorateWithMPtPhi(tthPartonHistory, "MC_W_from_t", Wp);
150  fillEtaBranch(tthPartonHistory, "MC_W_from_t_eta", Wp);
151 
152  decorateWithMPtPhi(tthPartonHistory, "MC_b_from_t", b);
153  fillEtaBranch(tthPartonHistory, "MC_b_from_t_eta", b);
154 
155  decorateWithMPtPhi(tthPartonHistory, "MC_Wdecay1_from_t", WpDecay1);
156  tthPartonHistory->auxdecor< int >("MC_Wdecay1_from_t_pdgId") = WpDecay1_pdgId;
157  fillEtaBranch(tthPartonHistory, "MC_Wdecay1_from_t_eta", WpDecay1);
158 
159  decorateWithMPtPhi(tthPartonHistory, "MC_Wdecay2_from_t", WpDecay2);
160  tthPartonHistory->auxdecor< int >("MC_Wdecay2_from_t_pdgId") = WpDecay2_pdgId;
161  fillEtaBranch(tthPartonHistory, "MC_Wdecay2_from_t_eta", WpDecay2);
162  }
163 
164  // anti-top specific
165  if (event_topbar) {
166  decorateWithMPtPhi(tthPartonHistory, "MC_tbar_beforeFSR", tbar_before);
167  fillEtaBranch(tthPartonHistory, "MC_tbar_beforeFSR_eta", tbar_before);
168 
169  decorateWithMPtPhi(tthPartonHistory, "MC_tbar_afterFSR", tbar_after);
170  fillEtaBranch(tthPartonHistory, "MC_tbar_afterFSR_eta", tbar_after);
171 
172  // anti-top from status-codes specific
173  if (event_topbar_SC) {
174  decorateWithMPtPhi(tthPartonHistory, "MC_tbar_afterFSR_SC", tbar_after_SC);
175  fillEtaBranch(tthPartonHistory, "MC_tbar_afterFSR_SC_eta", tbar_after_SC);
176  }
177 
178  decorateWithMPtPhi(tthPartonHistory, "MC_W_from_tbar", Wm);
179  fillEtaBranch(tthPartonHistory, "MC_W_from_tbar_eta", Wm);
180 
181  decorateWithMPtPhi(tthPartonHistory, "MC_b_from_tbar", bbar);
182  fillEtaBranch(tthPartonHistory, "MC_b_from_tbar_eta", bbar);
183 
184  decorateWithMPtPhi(tthPartonHistory, "MC_Wdecay1_from_tbar", WmDecay1);
185  tthPartonHistory->auxdecor< int >("MC_Wdecay1_from_tbar_pdgId") = WmDecay1_pdgId;
186  fillEtaBranch(tthPartonHistory, "MC_Wdecay1_from_tbar_eta", WmDecay1);
187 
188  decorateWithMPtPhi(tthPartonHistory, "MC_Wdecay2_from_tbar", WmDecay2);
189  tthPartonHistory->auxdecor< int >("MC_Wdecay2_from_tbar_pdgId") = WmDecay2_pdgId;
190  fillEtaBranch(tthPartonHistory, "MC_Wdecay2_from_tbar_eta", WmDecay2);
191  }//if
192  }
193  }
194 
196  // Get the Truth Particles
197 
198  const xAOD::TruthParticleContainer* truthParticles(nullptr);
199 
200  if(m_config->getDerivationStream() == "PHYS") //in DAOD_PHYS we don't have the truth particles container
201  {
202  //the functions ued in this class always start from the top, so it's enough to do the following
203  std::vector<std::string> collections = {"TruthTop", "TruthBoson"};
204  ATH_CHECK(buildContainerFromMultipleCollections(collections,"AT_tthPartonHistory_TruthParticles"));
205  ATH_CHECK(evtStore()->retrieve(truthParticles, "AT_tthPartonHistory_TruthParticles"));
206 
207  //we need to be able to navigate from the Ws to their decayProducts, see CalcTopPartonHistory.h for details
209 
210  }
211  else //otherwise we retrieve the container as usual
212  {
213  ATH_CHECK(evtStore()->retrieve(truthParticles, m_config->sgKeyMCParticle()));
214  }
215 
216  // Create the partonHistory xAOD object
217  //cppcheck-suppress uninitvar
219  //cppcheck-suppress uninitvar
221  partonCont->setStore(partonAuxCont);
222  //cppcheck-suppress uninitvar
223  xAOD::PartonHistory* tthPartonHistory = new xAOD::PartonHistory {};
224  partonCont->push_back(tthPartonHistory);
225 
226  // Recover the parton history for ttbar events
227  tthHistorySaver(truthParticles, tthPartonHistory);
228 
229  // Save to StoreGate / TStore
230  std::string outputSGKey = m_config->sgKeyTopPartonHistory();
231  std::string outputSGKeyAux = outputSGKey + "Aux.";
232 
233  StatusCode save = evtStore()->tds()->record(partonCont, outputSGKey);
234  StatusCode saveAux = evtStore()->tds()->record(partonAuxCont, outputSGKeyAux);
235  if (!save || !saveAux) {
236  return StatusCode::FAILURE;
237  }
238 
239  return StatusCode::SUCCESS;
240  }
241 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
top::PartonHistoryUtils::HiggsDecay::tau_decay2_isHadronic
int tau_decay2_isHadronic
Definition: PartonHistoryUtils.h:27
top::PartonHistoryUtils::HiggsDecay::tau_decay1_isHadronic
int tau_decay1_isHadronic
Definition: PartonHistoryUtils.h:26
top::CalcTthPartonHistory::ttH_values::decay1_from_decay2_pdgId
int decay1_from_decay2_pdgId
Definition: CalcTthPartonHistory.h:39
xAOD::PartonHistory
Interface class.
Definition: PartonHistory.h:48
top::CalcTopPartonHistory::buildContainerFromMultipleCollections
StatusCode buildContainerFromMultipleCollections(const std::vector< std::string > &collections, const std::string &out_contName)
used to build container from multiple collections in DAOD_PHYS we don't have the TruthParticles colle...
Definition: CalcTopPartonHistory.cxx:21
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
top::CalcTthPartonHistory::CalcTthPartonHistory
CalcTthPartonHistory(const std::string &name)
Definition: CalcTthPartonHistory.cxx:11
top
TopConfig A simple configuration that is NOT a singleton.
Definition: AnalysisTrackingHelper.cxx:58
top::CalcTopPartonHistory::linkBosonCollections
StatusCode linkBosonCollections()
currently in DAOD_PHYS TruthTop have links to Ws from the TruthBoson collection, which have no link t...
Definition: CalcTopPartonHistory.cxx:39
top::PartonHistoryUtils::HiggsDecay::decay2_from_decay1_pdgId
int decay2_from_decay1_pdgId
Definition: PartonHistoryUtils.h:33
top::CalcTthPartonHistory::ttH_values::decay2_from_decay1_p4
TLorentzVector decay2_from_decay1_p4
Definition: CalcTthPartonHistory.h:34
top::CalcTthPartonHistory::ttH_values::tau_decay1_from_decay2_isHadronic
int tau_decay1_from_decay2_isHadronic
Definition: CalcTthPartonHistory.h:43
top::CalcTthPartonHistory::ttH_values::tau_decay2_from_decay1_isHadronic
int tau_decay2_from_decay1_isHadronic
Definition: CalcTthPartonHistory.h:42
xAOD::PartonHistory::IniVarTth
void IniVarTth()
Definition: PartonHistory.cxx:633
top::PartonHistoryUtils::HiggsDecay::decay1_from_decay1_vector
TLorentzVector decay1_from_decay1_vector
subsequent decays of W/Z
Definition: PartonHistoryUtils.h:30
top::CalcTthPartonHistory::ttH_values::decay2_pdgId
int decay2_pdgId
Definition: CalcTthPartonHistory.h:30
top::CalcTthPartonHistory::execute
virtual StatusCode execute()
Definition: CalcTthPartonHistory.cxx:195
top::PartonHistoryUtils::HiggsDecay::decay1_from_decay2_vector
TLorentzVector decay1_from_decay2_vector
Definition: PartonHistoryUtils.h:34
top::PartonHistoryUtils::HiggsDecay::decay2_from_decay2_pdgId
int decay2_from_decay2_pdgId
Definition: PartonHistoryUtils.h:37
top::PartonHistoryUtils::HiggsDecay::decay1_pdgId
int decay1_pdgId
Definition: PartonHistoryUtils.h:23
top::CalcTthPartonHistory::ttH_values::decay2_p4
TLorentzVector decay2_p4
Definition: CalcTthPartonHistory.h:28
SG::AuxElement::auxdecor
Decorator< T, ALLOC >::reference_type auxdecor(const std::string &name) const
Fetch an aux decoration, as a non-const reference.
top::CalcTopPartonHistory::m_config
std::shared_ptr< top::TopConfig > m_config
Definition: CalcTopPartonHistory.h:87
top::CalcTthPartonHistory::ttH
struct top::CalcTthPartonHistory::ttH_values ttH
top::CalcTthPartonHistory::ttH_values::tau_decay1_isHadronic
int tau_decay1_isHadronic
Definition: CalcTthPartonHistory.h:31
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
top::CalcTthPartonHistory::tthHistorySaver
void tthHistorySaver(const xAOD::TruthParticleContainer *truthParticles, xAOD::PartonHistory *tthPartonHistory)
Definition: CalcTthPartonHistory.cxx:47
checkTP.save
def save(self, fileName="./columbo.out")
Definition: checkTP.py:178
top::CalcTopPartonHistory::b
bool b(const xAOD::TruthParticleContainer *truthParticles, TLorentzVector &b_beforeFSR, TLorentzVector &b_afterFSR)
Store the four-momentum of b (not from tops_ before and after FSR.
Definition: CalcTopPartonHistory.cxx:156
top::CalcTthPartonHistory::ttH_values::decay2_from_decay1_pdgId
int decay2_from_decay1_pdgId
Definition: CalcTthPartonHistory.h:36
top::PartonHistoryUtils::HiggsDecay::decay2_from_decay2_vector
TLorentzVector decay2_from_decay2_vector
Definition: PartonHistoryUtils.h:36
top::CalcTthPartonHistory::ttH_values::decay1_from_decay1_p4
TLorentzVector decay1_from_decay1_p4
Definition: CalcTthPartonHistory.h:33
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
PartonHistoryUtils.h
top::CalcTthPartonHistory::ttH_values::tau_decay1_from_decay1_isHadronic
int tau_decay1_from_decay1_isHadronic
Definition: CalcTthPartonHistory.h:41
top::PartonHistoryUtils::HiggsDecay::tau_decay1_from_decay1_isHadronic
int tau_decay1_from_decay1_isHadronic
Definition: PartonHistoryUtils.h:38
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
top::CalcTopPartonHistory::topAfterFSR_SC
bool topAfterFSR_SC(const xAOD::TruthParticleContainer *truthParticles, int start, TLorentzVector &top_afterFSR_SC_p4)
Store the four-momentum of the post-FSR top or anti-top found using statusCodes This would only work ...
Definition: CalcTopPartonHistory.cxx:83
top::CalcTthPartonHistory::ttH_values::decay2_from_decay2_pdgId
int decay2_from_decay2_pdgId
Definition: CalcTthPartonHistory.h:40
top::CalcTthPartonHistory::ttH_values::decay2_from_decay2_p4
TLorentzVector decay2_from_decay2_p4
Definition: CalcTthPartonHistory.h:38
top::PartonHistoryUtils::HiggsDecay::decay2_from_decay1_vector
TLorentzVector decay2_from_decay1_vector
Definition: PartonHistoryUtils.h:32
top::PartonHistoryUtils::HiggsDecay::decay1_from_decay1_pdgId
int decay1_from_decay1_pdgId
Definition: PartonHistoryUtils.h:31
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
top::PartonHistoryUtils::AnalyzeHiggsDecay
HiggsDecay AnalyzeHiggsDecay(const xAOD::TruthParticle *higgs)
Store higgs decay information.
Definition: PartonHistoryUtils.cxx:41
top::PartonHistoryUtils::HiggsDecay::tau_decay1_from_decay2_isHadronic
int tau_decay1_from_decay2_isHadronic
Definition: PartonHistoryUtils.h:40
top::PartonHistoryUtils::HiggsDecay::tau_decay2_from_decay2_isHadronic
int tau_decay2_from_decay2_isHadronic
Definition: PartonHistoryUtils.h:41
top::CalcTthPartonHistory::ttH_values::decay1_pdgId
int decay1_pdgId
Definition: CalcTthPartonHistory.h:29
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
top::CalcTthPartonHistory::ttH_values::decay1_p4
TLorentzVector decay1_p4
Definition: CalcTthPartonHistory.h:27
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
TopConfig.h
top::CalcTthPartonHistory::HiggsAndDecay
bool HiggsAndDecay(const xAOD::TruthParticleContainer *truthParticles)
Store the four-momentum of several particles in the Higgs decay chain.
Definition: CalcTthPartonHistory.cxx:13
top::PartonHistoryUtils::HiggsDecay::decay2_vector
TLorentzVector decay2_vector
Definition: PartonHistoryUtils.h:24
top::PartonHistoryUtils::HiggsDecay
Definition: PartonHistoryUtils.h:20
top::CalcTthPartonHistory::ttH_values::decay1_from_decay1_pdgId
int decay1_from_decay1_pdgId
Definition: CalcTthPartonHistory.h:35
top::CalcTopPartonHistory
Definition: CalcTopPartonHistory.h:39
top::PartonHistoryUtils::HiggsDecay::decay1_from_decay2_pdgId
int decay1_from_decay2_pdgId
Definition: PartonHistoryUtils.h:35
xAOD::PartonHistoryAuxContainer
Aux Container.
Definition: PartonHistory.h:41
top::CalcTthPartonHistory::ttH_values::tau_decay2_isHadronic
int tau_decay2_isHadronic
Definition: CalcTthPartonHistory.h:32
top::CalcTthPartonHistory::ttH_values::Higgs_p4
TLorentzVector Higgs_p4
Definition: CalcTthPartonHistory.h:26
top::CalcTopPartonHistory::topWb
bool topWb(const xAOD::TruthParticleContainer *truthParticles, int start, TLorentzVector &t_beforeFSR_p4, TLorentzVector &t_afterFSR_p4, TLorentzVector &W_p4, TLorentzVector &b_p4, TLorentzVector &Wdecay1_p4, int &Wdecay1_pdgId, TLorentzVector &Wdecay2_p4, int &Wdecay2_pdgId)
Store the four-momentum of several particles in the top decay chain.
Definition: CalcTopPartonHistory.cxx:182
top::PartonHistoryUtils::HiggsDecay::tau_decay2_from_decay1_isHadronic
int tau_decay2_from_decay1_isHadronic
Definition: PartonHistoryUtils.h:39
top::CalcTopPartonHistory::fillEtaBranch
void fillEtaBranch(xAOD::PartonHistory *partonHistory, std::string branchName, TLorentzVector &tlv)
Definition: CalcTopPartonHistory.cxx:692
top::CalcTthPartonHistory::ttH_values::decay1_from_decay2_p4
TLorentzVector decay1_from_decay2_p4
Definition: CalcTthPartonHistory.h:37
top::PartonHistoryUtils::HiggsDecay::decay2_pdgId
int decay2_pdgId
Definition: PartonHistoryUtils.h:25
top::PartonHistoryUtils::HiggsDecay::decay1_vector
TLorentzVector decay1_vector
direct higgs decay
Definition: PartonHistoryUtils.h:22
top::PartonHistoryUtils::decorateWithMPtPhi
void decorateWithMPtPhi(xAOD::PartonHistory *pHistory, const std::string &prefix, const TLorentzVector &vec)
Perform decoration M, Pt, Phi of the history from a TLorentzVector.
Definition: PartonHistoryUtils.cxx:187
CalcTthPartonHistory.h
top::CalcTthPartonHistory::ttH_values::tau_decay2_from_decay2_isHadronic
int tau_decay2_from_decay2_isHadronic
Definition: CalcTthPartonHistory.h:44