ATLAS Offline Software
TrigBmuxComboHypo.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <algorithm>
6 #include <numeric>
7 #include <iterator>
8 
9 #include "TrigBmuxComboHypo.h"
10 
11 #include "xAODMuon/Muon.h"
13 #include "xAODTracking/Vertex.h"
20 
23 
24 #include "AthViews/View.h"
25 #include "AthViews/ViewHelper.h"
27 
28 #include "Math/GenVector/VectorUtil.h"
29 #include "Math/Vector2D.h"
31 
32 
37 using ROOT::Math::XYVector;
38 
39 
40 const std::vector<std::vector<std::vector<double>>> TrigBmuxComboHypo::s_trkMass{
41  {{PDG::mKaon, PDG::mPion}, {PDG::mMuon}}, // {D0.K-, D0.pi+}, {mu-}
42  {{PDG::mKaon, PDG::mPion}, {PDG::mMuon, PDG::mPion}}, // {D*+.D0.K-, D*+.D0.pi+}, {mu-, D*+.pi+}
43  {{PDG::mKaon, PDG::mKaon, PDG::mPion}, {PDG::mMuon}}, // {D_s+.K+, D_s+.K-, D_s+.pi+}, {mu-}
44  {{PDG::mKaon, PDG::mPion, PDG::mPion}, {PDG::mMuon}}, // {D+.K-, D+.pi+, D+.pi+}, {mu-}
45  {{PDG::mProton, PDG::mKaon, PDG::mPion}, {PDG::mMuon}} // {Lambda_c+.p, Lambda_c+.K-, Lambda_c+.pi+}, {mu-}
46 };
47 
48 
49 TrigBmuxComboHypo::TrigBmuxComboHypo(const std::string& name, ISvcLocator* pSvcLocator)
50  : ::ComboHypo(name, pSvcLocator) {}
51 
52 
54  ATH_MSG_DEBUG( "TrigBmuxComboHypo::initialize()" );
55 
57 
58  ATH_CHECK( m_muonContainerKey.initialize() );
62  ATH_CHECK( m_trigBphysContainerKey.initialize() );
64 
65  ATH_CHECK( m_vertexFitter.retrieve() );
66  ATH_CHECK( m_vertexPointEstimator.retrieve() );
67  ATH_CHECK( m_trackToVertexTool.retrieve() );
68 
69  // allowed IDs to filter out incoming decisions at L2 level
70  for (const auto& item : triggerMultiplicityMap()) {
71  const HLT::Identifier id = HLT::Identifier(item.first);
72  m_allowedIDs.insert(id.numeric());
73  if (item.second.size() > 1) {
74  for (size_t i = 0; i < item.second.size(); i++) {
75  m_allowedIDs.insert(TrigCompositeUtils::createLegName(id, i).numeric());
76  }
77  }
78  }
79  if (msgLvl(MSG::DEBUG)) {
80  ATH_MSG_DEBUG( "Allowed decisions:" );
81  for (const DecisionID& id : m_allowedIDs) {
82  ATH_MSG_DEBUG( " +++ " << HLT::Identifier(id) );
83  }
84  }
85 
86  if (!m_monTool.empty()) {
87  ATH_CHECK( m_monTool.retrieve() );
88  ATH_MSG_DEBUG( "GenericMonitoringTool name:" << m_monTool );
89  }
90  else {
91  ATH_MSG_DEBUG( "No GenericMonitoringTool configured: no monitoring histograms will be available" );
92  }
93 
94  return StatusCode::SUCCESS;
95 }
96 
97 
98 StatusCode TrigBmuxComboHypo::execute(const EventContext& context) const {
99 
100  ATH_MSG_DEBUG( "TrigBmuxComboHypo::execute() starts" );
101 
102  ATH_MSG_DEBUG( "decision input key: " << decisionsInput().at(0).key() );
103  auto previousDecisionsHandle = SG::makeHandle(decisionsInput().at(0), context);
104  ATH_CHECK( previousDecisionsHandle.isValid() );
105  ATH_MSG_DEBUG( "Running with " << previousDecisionsHandle->size() << " previous decisions" );
106 
108 
109  auto trigBphysHandle = SG::makeHandle(m_trigBphysContainerKey, context);
110  ATH_CHECK( trigBphysHandle.record(std::make_unique<xAOD::TrigBphysContainer>(),
111  std::make_unique<xAOD::TrigBphysAuxContainer>()) );
112 
113  SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle {m_beamSpotKey, context};
114  ATH_CHECK( beamSpotHandle.isValid() );
115 
116  auto state = std::make_unique<TrigBmuxState>(context, *previousDecisionsHandle, *outputDecisionsHandle, trigBphysHandle.ptr(), *beamSpotHandle);
117 
118  ATH_CHECK( findBmuxCandidates(*state) );
119  ATH_CHECK( createDecisionObjects(*state) );
120 
121  ATH_MSG_DEBUG( "TrigBmuxComboHypo::execute() terminates with StatusCode::SUCCESS" );
122  return StatusCode::SUCCESS;
123 }
124 
125 
127 
128  auto& muons = state.muons;
129  muons.clear();
130 
131  // monitored variables
132  std::vector<int> nTrk;
133  auto mon_nMuon = Monitored::Scalar<int>("nMuon", 0);
134  auto mon_nTrk = Monitored::Collection("nTrk", nTrk);
135  auto mon_nBPhysObject = Monitored::Scalar<int>("nBPhysObject", 0);
136 
138  mon_nMuon, mon_nTrk, mon_nBPhysObject);
139 
140  for (const Decision* decision : state.previousDecisions()) {
141  if (!TrigCompositeUtils::isAnyIDPassing(decision, m_allowedIDs)) continue;
142 
143  auto decisionEL = TrigCompositeUtils::decisionToElementLink(decision, state.context());
145  auto muonEL = decision->objectLink<xAOD::MuonContainer>(TrigCompositeUtils::featureString());
146  const auto muon = *muonEL;
147  if (!muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) continue;
148  if (!muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) continue;
149  const auto muonInDetTrack = muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
150  auto p_mu = muonInDetTrack->genvecP4();
151  p_mu.SetM(PDG::mMuon);
152  double z0_mu = (m_trkZ0 > 0. ? getTrkImpactParameterZ0(state.context(), *muonInDetTrack, state.beamSpotPosition()) : -1.);
153  mon_nMuon++;
154 
155  // add muon from decision to state.leptons
158  size_t muonIndex = muons.size();
159  muons.push_back({muonEL, decisionEL, decisionIDs});
160 
161  ATH_MSG_DEBUG( "Found muon (CombinedTrackParticle) pt/eta/phi/q: " << muon->pt() << " / " << muon->eta() << " / " << muon->phi() << " / " << muon->charge() );
162 
163  auto viewLinkInfo = TrigCompositeUtils::findLink<ViewContainer>(decision, TrigCompositeUtils::viewString(), true);
164  ATH_CHECK( viewLinkInfo.isValid() );
165  auto view = *viewLinkInfo.link;
166 
167  auto roiLinkInfo = TrigCompositeUtils::findLink<TrigRoiDescriptorCollection>(decision, TrigCompositeUtils::roiString(), true);
168  ATH_CHECK( roiLinkInfo.isValid() );
169  const auto roi = *roiLinkInfo.link;
170 
171  auto tracksHandle = ViewHelper::makeHandle(view, m_trackParticleContainerKey, state.context());
172  ATH_CHECK( tracksHandle.isValid() );
173  ATH_MSG_DEBUG( "Tracks container " << m_trackParticleContainerKey << " size: " << tracksHandle->size() );
174 
175  std::vector<ElementLink<xAOD::TrackParticleContainer>> tracks;
176  tracks.reserve(tracksHandle->size());
177  for (size_t idx = 0; idx < tracksHandle->size(); ++idx) {
178  const auto track = tracksHandle->get(idx);
179  if (track->definingParametersCovMatrixVec().empty() || (m_trkZ0 > 0. && std::abs(getTrkImpactParameterZ0(state.context(), *track, state.beamSpotPosition()) - z0_mu) > m_trkZ0)) continue;
180  if (roi->composite() && !isInSameRoI(muon, track)) continue;
181  tracks.emplace_back(ViewHelper::makeLink<xAOD::TrackParticleContainer>(view, tracksHandle, idx));
182  }
183  // find the best match to the original muon and remove it
184  if (tracks.size() < 2) continue;
185  std::sort(tracks.begin(), tracks.end(), [p_mu](const auto& lhs, const auto& rhs){ return ROOT::Math::VectorUtil::DeltaR(p_mu, (*lhs)->genvecP4()) > ROOT::Math::VectorUtil::DeltaR(p_mu, (*rhs)->genvecP4()); });
186  if (isIdenticalTracks(muonInDetTrack, *tracks.back())) tracks.pop_back();
187  nTrk.push_back(tracks.size());
188 
189  std::sort(tracks.begin(), tracks.end(), [](const auto& lhs, const auto& rhs){ return ((*lhs)->pt() > (*rhs)->pt()); });
190 
191  if (msgLvl(MSG::DEBUG)) {
192  ATH_MSG_DEBUG( "Dump found tracks before vertex fit: " << tracks.size() << " candidates" );
193  for (const auto& trackEL : tracks) {
194  const xAOD::TrackParticle* track = *trackEL;
195  ATH_MSG_DEBUG( " -- track pt/eta/phi/q: " << track->pt() << " / " << track->eta() << " / " << track->phi() << " / " << track->charge() );
196  }
197  }
198 
199  size_t iterations = 0;
200  bool isOverWarningThreshold = false;
201  for (size_t itrk1 = 0; itrk1 < tracks.size(); ++itrk1) {
202  const xAOD::TrackParticle* trk1 = *tracks[itrk1];
203  auto p_trk1 = trk1->genvecP4();
204  auto charge1 = trk1->charge();
205 
206  for (size_t itrk2 = 0; itrk2 < tracks.size(); ++itrk2) {
207  if (itrk2 == itrk1) continue;
208  const xAOD::TrackParticle* trk2 = *tracks[itrk2];
209  auto p_trk2 = trk2->genvecP4();
210  auto charge2 = trk2->charge();
211 
212  // D0(-> K- pi+)
214  std::unique_ptr<xAOD::Vertex> vtx_D0;
216  if (m_BToD0 &&
217  charge1 * charge2 < 0. &&
218  p_trk1.Pt() > m_BToD0_minD0KaonPt &&
219  p_trk2.Pt() > m_BToD0_minD0PionPt &&
220  (p_trk1 + p_trk2).Pt() > m_BToD0_minD0Pt &&
221  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M(), m_BToD0_D0MassRange) &&
222  isInMassRange((p_mu + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion)).M(), m_BToD0_massRange)) {
223  vtx_D0 = fit(state.context(), {muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2]}, kD0);
224  ++iterations;
225 
226  if (vtx_D0 && vtx_D0->chiSquared() < m_BToD0_chi2) {
227  ATH_MSG_DEBUG( "Partially reconstructed B+ -> mu+ nu_mu anti-D0(-> K+ pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << " }" );
228  if (m_makeCascadeFit) {
229  auto result = fitCascade(state.context(), {muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2]}, kD0);
230  // all fitted (muon + D0) candidates should be taken into account to avoid bias in (muon + D*-) sample
231  if (result &&
232  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 2) {
233  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
235  p_D0 = ROOT::Math::PtEtaPhiMVector(triggerObjects[0]->pt(), triggerObjects[0]->eta(), triggerObjects[0]->phi(), triggerObjects[0]->fitmass());
237  ATH_CHECK( D0.isValid() );
238 
239  // only candidates with proper Lxy values should fire B2D0MUX trigger
240  if (triggerObjects[1]->lxy() > m_BToD0_LxyB && triggerObjects[0]->lxy() > m_BToD0_LxyD0) {
241  triggerObjects[1]->setParticleType(xAOD::TrigBphys::B2D0MUX);
242  mon_nBPhysObject++;
243  }
244  }
245  }
246  else {
247  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
248  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::B2D0MUX, *vtx_D0, s_trkMass[kD0][0]) );
249  p_D0 = ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass());
250  triggerObject->setMass((p_mu + p_D0).M());
252  ATH_CHECK( D0.isValid() );
253  mon_nBPhysObject++;
254  }
255  }
256  } // end of D0
257 
258  for (size_t itrk3 = 0; itrk3 < tracks.size(); ++itrk3) {
259  if (itrk3 == itrk1 || itrk3 == itrk2) continue;
260  const xAOD::TrackParticle* trk3 = *tracks[itrk3];
261  auto p_trk3 = trk3->genvecP4();
262  auto charge3 = trk3->charge();
263 
264  std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks = {muon->inDetTrackParticleLink(), tracks[itrk1], tracks[itrk2], tracks[itrk3]};
265 
266  // D*-(-> anti-D0(-> K+ pi-) pi-)
267  if (m_BToD0_makeDstar && D0.isValid() &&
268  p_trk3.Pt() > m_BToD0_minDstarPionPt &&
269  (p_trk1 + p_trk2 + p_trk3).Pt() > m_BToD0_minDstarPt &&
270  isInMassRange((p_D0 + p_trk3.SetM(PDG::mPion)).M() - p_D0.M() + PDG::mD0, m_BToD0_DstarMassRange)) {
271 
272  bool makeDstar = true;
273  if (m_BToD0_maxDstarPionZ0 > 0.) {
274  std::unique_ptr<const Trk::Perigee> perigee(m_trackToVertexTool->perigeeAtVertex(state.context(), *trk3, vtx_D0->position()));
275  if (!perigee || std::abs(perigee->parameters()[Trk::z0]) > m_BToD0_maxDstarPionZ0) makeDstar = false;
276  }
277 
278  if (makeDstar) {
279  if (m_makeCascadeFit) {
281  if (result &&
282  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
283  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_BToD0_LxyBd &&
284  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_BToD0_LxyD0) {
285 
286  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
288  triggerObjects[1]->setSecondaryDecayLink(D0);
289  mon_nBPhysObject++;
290  }
291  }
292  else {
293  xAOD::TrackParticle::GenVecFourMom_t p_Dstar = p_D0 + p_trk3.SetM(PDG::mPion);
294  xAOD::TrigBphys* Dstar = state.addTriggerObject(muonIndex);
295  Dstar->initialise(0, p_Dstar.Eta(), p_Dstar.Phi(), p_Dstar.Pt(), xAOD::TrigBphys::BD2DSTMUX, (p_mu + p_Dstar).M(), xAOD::TrigBphys::EF);
296  Dstar->setFitmass((p_D0 + p_trk3).M() - p_D0.M() + PDG::mD0);
298  Dstar->setLowerChainLink(D0);
299 
301  "TrigBphys object:\n\t " <<
302  "roiId: " << Dstar->roiId() << "\n\t " <<
303  "particleType: " << Dstar->particleType() << "\n\t " <<
304  "level: " << Dstar->level() << "\n\t " <<
305  "eta: " << Dstar->eta() << "\n\t " <<
306  "phi: " << Dstar->phi() << "\n\t " <<
307  "mass: " << Dstar->mass() << "\n\t " <<
308  "fitmass: " << Dstar->fitmass() << "\n\t " <<
309  "chi2/NDF: " << Dstar->fitchi2() << " / " << Dstar->fitndof() << "\n\t " <<
310  "vertex: (" << Dstar->fitx() << ", " << Dstar->fity() << ", " << Dstar->fitz() << ")" );
311 
312  mon_nBPhysObject++;
313  }
314  }
315  } // end of D*-
316 
317  // B0 -> mu+ nu_mu D-(-> K+ pi- pi-)
318  if (m_BdToD &&
319  itrk3 > itrk2 &&
320  charge1 * charge2 < 0. && charge2 * charge3 > 0. &&
321  p_trk1.Pt() > m_BdToD_minKaonPt &&
322  p_trk2.Pt() > m_BdToD_minPionPt &&
323  p_trk3.Pt() > m_BdToD_minPionPt &&
324  (p_trk1 + p_trk2 + p_trk3).Pt() > m_BdToD_minDPt &&
325  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion) + p_trk3.SetM(PDG::mPion)).M(), m_BdToD_DMassRange) &&
326  isInMassRange((p_mu + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mPion) + p_trk3.SetM(PDG::mPion)).M(), m_BdToD_massRange)) {
327  auto vtx_D = fit(state.context(), trackParticleLinks, kDplus);
328  ++iterations;
329 
330  if (vtx_D && vtx_D->chiSquared() < m_BdToD_chi2) {
331  ATH_MSG_DEBUG( "Partially reconstructed B0 -> mu+ nu_mu D-(-> K+ pi- pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << ", " << itrk3 << " }" );
332  if (m_makeCascadeFit) {
334  if (result &&
335  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
336  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_BdToD_LxyBd &&
337  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_BdToD_LxyD) {
338 
339  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
341  mon_nBPhysObject++;
342  }
343  }
344  else {
345  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
346  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::BD2DMMUX, *vtx_D, s_trkMass[kDplus][0]) );
347  xAOD::TrackParticle::GenVecFourMom_t p_D(ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass()));
348  triggerObject->setMass((p_mu + p_D).M());
349  mon_nBPhysObject++;
350  }
351  }
352  } // end of B0
353 
354  // B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-)
355  if (m_BsToDs &&
356  itrk2 > itrk1 &&
357  charge1 * charge2 < 0. &&
358  p_trk1.Pt() > m_BsToDs_minKaonPt &&
359  p_trk2.Pt() > m_BsToDs_minKaonPt &&
360  p_trk3.Pt() > m_BsToDs_minPionPt &&
361  (p_trk1 + p_trk2 + p_trk3).Pt() > m_BsToDs_minDsPt &&
362  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon)).M(), m_BsToDs_phiMassRange) &&
363  isInMassRange((p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_BsToDs_DsMassRange) &&
364  isInMassRange((p_mu + p_trk1.SetM(PDG::mKaon) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_BsToDs_massRange)) {
365  auto vtx_Ds = fit(state.context(), trackParticleLinks, kDs);
366  ++iterations;
367 
368  if (vtx_Ds && vtx_Ds->chiSquared() < m_BsToDs_chi2) {
369  ATH_MSG_DEBUG( "Partially reconstructed B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << ", " << itrk3 << " }" );
370  if (m_makeCascadeFit) {
371  auto result = fitCascade(state.context(), trackParticleLinks, kDs);
372  if (result &&
373  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
374  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_BsToDs_LxyBs &&
375  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_BsToDs_LxyDs) {
376 
377  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
379  mon_nBPhysObject++;
380  }
381  }
382  else {
383  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
384  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::BS2DSMUX, *vtx_Ds, s_trkMass[kDs][0]) );
385  xAOD::TrackParticle::GenVecFourMom_t p_Ds(ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass()));
386  triggerObject->setMass((p_mu + p_Ds).M());
387  mon_nBPhysObject++;
388  }
389  }
390  } // end of B_s0
391 
392  // Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-)
393  if (m_LambdaBToLambdaC &&
394  charge1 * charge3 > 0. && charge1 * charge2 < 0. &&
395  p_trk1.Pt() > m_LambdaBToLambdaC_minProtonPt &&
396  p_trk2.Pt() > m_LambdaBToLambdaC_minKaonPt &&
397  p_trk3.Pt() > m_LambdaBToLambdaC_minPionPt &&
398  (p_trk1 + p_trk2 + p_trk3).Pt() > m_LambdaBToLambdaC_minLambdaCPt &&
399  isInMassRange((p_trk1.SetM(PDG::mProton) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_LambdaBToLambdaC_LambdaCMassRange) &&
400  isInMassRange((p_mu + p_trk1.SetM(PDG::mProton) + p_trk2.SetM(PDG::mKaon) + p_trk3.SetM(PDG::mPion)).M(), m_LambdaBToLambdaC_massRange)) {
401  auto vtx_LambdaC = fit(state.context(), trackParticleLinks, kLambdaC);
402  ++iterations;
403 
404  if (vtx_LambdaC && vtx_LambdaC->chiSquared() < m_LambdaBToLambdaC_chi2) {
405  ATH_MSG_DEBUG( "Partially reconstructed Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-) candidate has been created from { " << itrk1 << ", " << itrk2 << ", " << itrk3 << " }" );
406  if (m_makeCascadeFit) {
408  if (result &&
409  result->fitChi2() < m_cascadeChi2 && result->nDoF() == 4 &&
410  Lxy(state.beamSpotPosition(), result->vertices()[1]->position(), result->getParticleMoms()[1]) > m_LambdaBToLambdaC_LxyLb &&
411  Lxy(result->vertices()[1]->position(), result->vertices()[0]->position(), result->getParticleMoms()[0]) > m_LambdaBToLambdaC_LxyLc) {
412 
413  std::vector<xAOD::TrigBphys*> triggerObjects = state.addTriggerObjects(2, muonIndex);
415  mon_nBPhysObject++;
416  }
417  }
418  else {
419  xAOD::TrigBphys* triggerObject = state.addTriggerObject(muonIndex);
420  ATH_CHECK( fillTriggerObject(*triggerObject, xAOD::TrigBphys::LB2LCMUX, *vtx_LambdaC, s_trkMass[kLambdaC][0]) );
421  xAOD::TrackParticle::GenVecFourMom_t p_LambdaC(ROOT::Math::PtEtaPhiMVector(triggerObject->pt(), triggerObject->eta(), triggerObject->phi(), triggerObject->fitmass()));
422  triggerObject->setMass((p_mu + p_LambdaC).M());
423  mon_nBPhysObject++;
424  }
425  }
426  } // end of Lambda_b0
427 
428  }
429  vtx_D0.reset();
430 
431  }
432 
433  if (iterations > m_fitAttemptsWarningThreshold && !isOverWarningThreshold) {
434  ATH_MSG_WARNING( iterations << " combinations for vertex fitter have been processed; " << mon_nBPhysObject << " vertices have been created" );
435  isOverWarningThreshold = true;
436  }
437  if (iterations > m_fitAttemptsBreakThreshold) {
438  ATH_MSG_WARNING( "the number of fit attempts has exceeded the limit; breaking the loop at this point" );
439  break;
440  }
441  }
442  }
443  return StatusCode::SUCCESS;
444 }
445 
446 
448 
449  size_t idx = 0;
450  for (const xAOD::TrigBphys* triggerObject : state.trigBphysCollection()) {
451  if (triggerObject->particleType() == xAOD::TrigBphys::UNKNOWNPTYPE) continue;
452 
453  ATH_MSG_DEBUG( "Found xAOD::TrigBphys object: mass = " << triggerObject->mass() );
454 
455  auto triggerObjectEL = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), triggerObject->index());
456  ATH_CHECK( triggerObjectEL.isValid() );
457 
458  const auto& muon = state.muons.at(state.trigBphysMuonIndices.at(idx));
459 
460  // create a new output Decision object, backed by the 'decisions' container.
462 
463  // add link to the previous decision
464  decision->addObjectCollectionLink(TrigCompositeUtils::seedString(), muon.decisionLink);
465 
466  // set mandatory link to the trigger object
467  decision->setObjectLink<xAOD::TrigBphysContainer>(TrigCompositeUtils::featureString(), triggerObjectEL);
468 
469  std::vector<const DecisionIDContainer*> previousDecisionIDs(1, &muon.decisionIDs);
470  for (const auto& tool : hypoTools()) {
471  ATH_MSG_DEBUG( "Go to " << tool );
472  ATH_CHECK( tool->decideOnSingleObject(decision, previousDecisionIDs) );
473  }
474  ++idx;
475  }
476 
477  return StatusCode::SUCCESS;
478 }
479 
480 
481 std::unique_ptr<xAOD::Vertex> TrigBmuxComboHypo::fit(
482  const EventContext& context,
484  Decay decay) const {
485 
486  ATH_MSG_DEBUG( "Perform vertex fit" );
487 
488  if (trackParticleLinks.size() < 3) {
489  ATH_MSG_WARNING( "At least muon and two tracks should be given to the vertex fitter" );
490  return std::unique_ptr<xAOD::Vertex>(nullptr);
491  }
492 
493  std::vector<const xAOD::TrackParticle*> tracklist(trackParticleLinks.size() - 1, nullptr);
494  std::transform(trackParticleLinks.begin() + 1, trackParticleLinks.end(), tracklist.begin(),
495  [](const ElementLink<xAOD::TrackParticleContainer>& link){ return *link; });
496 
497  Amg::Vector3D startingPoint = Amg::Vector3D::Zero(3);
498  int flag = 0;
499  int errorcode = 0;
500  const Trk::Perigee& perigee1 = tracklist[0]->perigeeParameters();
501  const Trk::Perigee& perigee2 = tracklist[1]->perigeeParameters();
502  startingPoint = m_vertexPointEstimator->getCirclesIntersectionPoint(&perigee1, &perigee2, flag, errorcode);
503  if (errorcode != 0) startingPoint = Amg::Vector3D::Zero(3);
504  ATH_MSG_DEBUG( "Starting point: (" << startingPoint(0) << ", " << startingPoint(1) << ", " << startingPoint(2) << ")" );
505 
506  auto fitterState = m_vertexFitter->makeState(context);
507  m_vertexFitter->setMassInputParticles(s_trkMass[static_cast<size_t>(decay)][0], *fitterState);
508 
509  std::unique_ptr<xAOD::Vertex> vertex(m_vertexFitter->fit(tracklist, startingPoint, *fitterState));
510  if (!vertex) {
511  ATH_MSG_DEBUG( "Vertex fit fails" );
512  return vertex;
513  }
514  if (vertex->chiSquared() > 50.) {
515  ATH_MSG_DEBUG( "Fit is successful, but vertex chi2 is too high, we are not going to save it (chi2 = " << vertex->chiSquared() << ")" );
516  vertex.reset();
517  return vertex;
518  }
519  ATH_MSG_DEBUG( "Fit is successful" );
520 
521  // update trackParticleLinks()
522  vertex->clearTracks();
523  vertex->setTrackParticleLinks(trackParticleLinks);
524 
525  return vertex;
526 }
527 
528 
529 std::unique_ptr<Trk::VxCascadeInfo> TrigBmuxComboHypo::fitCascade(
530  const EventContext& context,
532  Decay decay) const {
533 
534  if (trackParticleLinks.size() != (decay == kD0 ? 3 : 4)) {
535  ATH_MSG_WARNING( "fitCascade(): " << (decay == kD0 ? 3 : 4) << " tracks required for decay " << decay << ", but trackParticleLinks size = " << trackParticleLinks.size() );
536  return std::unique_ptr<Trk::VxCascadeInfo>(nullptr);
537  }
538 
539  std::vector<std::vector<ElementLink<xAOD::TrackParticleContainer>>> vtx_trackParticleLinks;
540  switch (decay) {
541 
542  case kD0: // B+ -> mu+ nu_mu anti-D0(-> K+ pi-)
543  vtx_trackParticleLinks = {{trackParticleLinks[1], trackParticleLinks[2]}, // B+.anti-D0.K+, B+.anti-D0.pi-
544  {trackParticleLinks[0]}}; // B+.mu+
545  break;
546 
547  case kDstar: // B0 -> mu+ nu_mu D*-(-> anti-D0(-> K+ pi-) pi-)
548  vtx_trackParticleLinks = {{trackParticleLinks[1], trackParticleLinks[2]}, // B0.D*-.anti-D0.K+, B0.D*-.anti-D0.pi-
549  {trackParticleLinks[0], trackParticleLinks[3]}}; // B0.mu+, B0.D*-.pi-
550  break;
551 
552  case kDs: // B_s0 -> mu+ nu_mu D_s-(->phi(-> K+ K-) pi-)
553  case kDplus: // B0 -> mu+ nu_mu D-(-> K+ pi- pi-)
554  case kLambdaC: // anti-Lambda_b0 -> mu+ nu_mu anti-Lambda_c-(-> anti-p K+ pi-)
555  vtx_trackParticleLinks = {{trackParticleLinks[1], trackParticleLinks[2], trackParticleLinks[3]}, // B_s0.D_s-.phi.K+, B_s0.D_s-.phi.K-, B_s0.D_s-.pi-
556  {trackParticleLinks[0]}}; // B_s0.mu+
557  break;
558 
559  default:
560  ATH_MSG_WARNING( "fitCascade(): decay " << decay << " has not been defined in McTopologyTool" );
561  return std::unique_ptr<Trk::VxCascadeInfo>(nullptr);
562  break;
563  }
564 
565  std::vector<std::vector<const xAOD::TrackParticle*>> vtx_tracks(vtx_trackParticleLinks.size());
566  for (size_t i = 0; i < vtx_trackParticleLinks.size(); ++i) {
567  for (size_t j = 0; j < vtx_trackParticleLinks[i].size(); ++j) {
568  vtx_tracks[i].push_back(*vtx_trackParticleLinks[i][j]);
569  }
570  }
571 
572  auto state = m_vertexFitter->makeState(context);
573  m_vertexFitter->setRobustness(0, *state);
574 
575  std::vector<Trk::VertexID> precedingVertices(1, m_vertexFitter->startVertex(vtx_tracks[0], s_trkMass[static_cast<size_t>(decay)][0], *state));
576  m_vertexFitter->nextVertex(vtx_tracks[1], s_trkMass[static_cast<size_t>(decay)][1], precedingVertices, *state);
577  std::unique_ptr<Trk::VxCascadeInfo> result(m_vertexFitter->fitCascade(*state));
578 
579  if (result) {
580  ATH_MSG_DEBUG( "Cascade fit is successful: chi2 = " << result->fitChi2() << "; NDF = " << result->nDoF() );
581  result->setSVOwnership(true);
582 
583  size_t i = 0;
584  for (xAOD::Vertex* vertex : result->vertices()) {
585  vertex->clearTracks();
586  vertex->setTrackParticleLinks(vtx_trackParticleLinks[i++]);
587  }
588  }
589 
590  return result;
591 }
592 
593 
595  xAOD::TrigBphys& triggerObject,
597  const xAOD::Vertex& vertex,
598  const std::vector<double>& trkMass) const {
599 
600  // refitted track momentum as a 4-vector for mass hypothesis defined by the given decay value
602  std::vector<xAOD::TrackParticle::GenVecFourMom_t> momenta;
603  ATH_CHECK( vertex.vxTrackAtVertexAvailable() );
604  ATH_CHECK( vertex.vxTrackAtVertex().size() == trkMass.size() );
605  for (size_t i = 0; i < vertex.vxTrackAtVertex().size(); ++i) {
606  const Trk::TrackParameters* perigee = vertex.vxTrackAtVertex()[i].perigeeAtVertex();
607  ATH_CHECK( perigee != nullptr );
608  const Amg::Vector3D& p = perigee->momentum();
609  momenta.emplace_back(p.x(), p.y(), p.z(), trkMass[i]);
610  momentum += momenta.back();
611  }
612 
613  triggerObject.initialise(0, momentum.Eta(), momentum.Phi(), momentum.Pt(), type, momentum.M(), xAOD::TrigBphys::EF);
614 
615  triggerObject.setFitmass(momentum.M());
616  triggerObject.setFitx(vertex.x());
617  triggerObject.setFity(vertex.y());
618  triggerObject.setFitz(vertex.z());
619  triggerObject.setFitchi2(vertex.chiSquared());
620  triggerObject.setFitndof(vertex.numberDoF());
621 
622  // set all the particles associated with the decay
623  triggerObject.setTrackParticleLinks(vertex.trackParticleLinks());
624 
626  "TrigBphys object:\n\t " <<
627  "roiId: " << triggerObject.roiId() << "\n\t " <<
628  "particleType: " << triggerObject.particleType() << "\n\t " <<
629  "level: " << triggerObject.level() << "\n\t " <<
630  "eta: " << triggerObject.eta() << "\n\t " <<
631  "phi: " << triggerObject.phi() << "\n\t " <<
632  "mass: " << triggerObject.mass() << "\n\t " <<
633  "fitmass: " << triggerObject.fitmass() << "\n\t " <<
634  "chi2/NDF: " << triggerObject.fitchi2() << " / " << triggerObject.fitndof() << "\n\t " <<
635  "vertex: (" << triggerObject.fitx() << ", " << triggerObject.fity() << ", " << triggerObject.fitz() << ")" );
636 
637  return StatusCode::SUCCESS;
638 }
639 
640 
642  std::vector<xAOD::TrigBphys*>& triggerObjects,
644  const Trk::VxCascadeInfo& vxCascadeInfo,
645  const Amg::Vector3D& beamSpotPosition) const {
646 
647  const std::vector<xAOD::Vertex*>& vertices = vxCascadeInfo.vertices();
648  const std::vector<std::vector<TLorentzVector>>& momenta = vxCascadeInfo.getParticleMoms();
649  ATH_CHECK( triggerObjects.size() == vertices.size() );
650 
651  for (size_t i = 0; i < vertices.size(); ++i) {
652  const xAOD::Vertex* vertex = vertices[i];
653  TLorentzVector momentum = std::accumulate(momenta[i].begin(), momenta[i].end(), TLorentzVector());
654  xAOD::TrigBphys* triggerObject = triggerObjects[i];
656  triggerObject->setFitmass(momentum.M());
657  triggerObject->setFitx(vertex->x());
658  triggerObject->setFity(vertex->y());
659  triggerObject->setFitz(vertex->z());
660  triggerObject->setTrackParticleLinks(vertex->trackParticleLinks());
661  }
662 
663  // D0/D(*)-/D_s-/Lambda_c+
664  triggerObjects[0]->setLxy(Lxy(vertices[1]->position(), vertices[0]->position(), momenta[0]));
665  triggerObjects[0]->setSecondaryDecayLink(ElementLink<xAOD::TrigBphysContainer>(m_trigBphysContainerKey.key(), triggerObjects[1]->index()));
666  ATH_CHECK( triggerObjects[0]->secondaryDecayLink().isValid() );
667 
668  // B+/B0/B_s0/Lambda_b0
669  triggerObjects[1]->setParticleType(type);
670  triggerObjects[1]->setFitchi2(vxCascadeInfo.fitChi2());
671  triggerObjects[1]->setFitndof(vxCascadeInfo.nDoF());
672  triggerObjects[1]->setLxy(Lxy(beamSpotPosition, vertices[1]->position(), momenta[1]));
673  triggerObjects[1]->setLowerChainLink(ElementLink<xAOD::TrigBphysContainer>(m_trigBphysContainerKey.key(), triggerObjects[0]->index()));
674  ATH_CHECK( triggerObjects[1]->lowerChainLink().isValid() );
675 
676  if (msgLvl(MSG::DEBUG)) {
677  const xAOD::TrigBphys* vtx0 = triggerObjects[0];
678  const xAOD::TrigBphys* vtx1 = triggerObjects[1];
680  "TrigBphys object:\n\t " <<
681  "particleType: " << vtx1->particleType() << "\n\t " <<
682  "chi2/NDF: " << vtx1->fitchi2() << " / " << vtx1->fitndof() << "\n\t " <<
683  "vertex0: (" << vtx0->fitx() << ", " << vtx0->fity() << ", " << vtx0->fitz() << ")\n\t " <<
684  "vertex1: (" << vtx1->fitx() << ", " << vtx1->fity() << ", " << vtx1->fitz() << ")\n\t " <<
685  "Lxy(B): " << vtx1->lxy() << "\n\t " <<
686  "Lxy(D): " << vtx0->lxy() );
687  }
688 
689  return StatusCode::SUCCESS;
690 }
691 
692 
694 
695  if (lhs->charge() * rhs->charge() < 0.) return false;
696  return (ROOT::Math::VectorUtil::DeltaR(lhs->genvecP4(), rhs->genvecP4()) < m_deltaR);
697 }
698 
699 
701 
702  auto p_mu = muon->genvecP4();
703  auto p_trk = track->genvecP4();
704  return (ROOT::Math::VectorUtil::DeltaPhi(p_mu, p_trk) < m_roiPhiWidth && std::abs(p_mu.eta() - p_trk.eta()) < m_roiEtaWidth);
705 }
706 
707 
708 double TrigBmuxComboHypo::getTrkImpactParameterZ0(const EventContext& ctx, const xAOD::TrackParticle& track, const Amg::Vector3D& vertex) const {
709 
710  std::unique_ptr<const Trk::Perigee> perigee(m_trackToVertexTool->perigeeAtVertex(ctx, track, vertex));
711  return (perigee ? perigee->parameters()[Trk::z0] : -1000.);
712 }
713 
714 
715 double TrigBmuxComboHypo::Lxy(const Amg::Vector3D& productionVertex, const Amg::Vector3D& decayVertex, const std::vector<TLorentzVector>& momenta) const {
716 
717  XYVector R(decayVertex.x() - productionVertex.x(), decayVertex.y() - productionVertex.y());
718  XYVector pT;
719  for (const auto& p : momenta) {
720  pT += XYVector(p.Px(), p.Py());
721  }
722  return R.Dot(pT.unit());
723 }
TrigBmuxComboHypo::m_BdToD_massRange
Gaudi::Property< std::pair< double, double > > m_BdToD_massRange
Definition: TrigBmuxComboHypo.h:259
TrigBmuxComboHypo::s_trkMass
static const std::vector< std::vector< std::vector< double > > > s_trkMass
Definition: TrigBmuxComboHypo.h:326
TrigBmuxComboHypo::m_vertexFitter
ToolHandle< Trk::TrkVKalVrtFitter > m_vertexFitter
Definition: TrigBmuxComboHypo.h:317
xAOD::TrackParticle_v1::GenVecFourMom_t
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzM4D< double > > GenVecFourMom_t
Base 4 Momentum type for TrackParticle.
Definition: TrackParticle_v1.h:78
TrigBmuxComboHypo::m_muonContainerKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
Definition: TrigBmuxComboHypo.h:193
TrigBmuxComboHypo::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TrigBmuxComboHypo.h:198
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
TrigBmuxComboHypo::findBmuxCandidates
StatusCode findBmuxCandidates(TrigBmuxState &) const
Definition: TrigBmuxComboHypo.cxx:126
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:195
TrigBmuxComboHypo::m_BdToD_minKaonPt
Gaudi::Property< double > m_BdToD_minKaonPt
Definition: TrigBmuxComboHypo.h:253
xAOD::TrigBphys_v1::setFitchi2
void setFitchi2(float FitChi2)
set method: chi2 from vertex fit
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigBmuxComboHypo::m_LambdaBToLambdaC_minKaonPt
Gaudi::Property< double > m_LambdaBToLambdaC_minKaonPt
Definition: TrigBmuxComboHypo.h:297
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Trk::VxCascadeInfo
Definition: VxCascadeInfo.h:75
TrigBmuxComboHypo::m_LambdaBToLambdaC_chi2
Gaudi::Property< float > m_LambdaBToLambdaC_chi2
Definition: TrigBmuxComboHypo.h:307
TrigCompositeUtils::DecisionID
unsigned int DecisionID
Definition: TrigComposite_v1.h:27
TrigBmuxComboHypo::m_BdToD_minPionPt
Gaudi::Property< double > m_BdToD_minPionPt
Definition: TrigBmuxComboHypo.h:255
xAOD::TrigBphys_v1::BD2DSTMUX
@ BD2DSTMUX
Definition: TrigBphys_v1.h:75
ComboHypo::decisionsOutput
const SG::WriteHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsOutput() const
Definition: ComboHypo.h:41
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
TrigBmuxComboHypo::m_deltaR
Gaudi::Property< double > m_deltaR
Definition: TrigBmuxComboHypo.h:205
TrigCompositeUtils::DecisionContainer
xAOD::TrigCompositeContainer DecisionContainer
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigCompositeContainer.h:21
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
IDTPM::R
float R(const U &p)
Definition: TrackParametersHelper.h:101
TrigCompositeUtils.h
xAOD::TrackParticle_v1::charge
float charge() const
Returns the charge.
Definition: TrackParticle_v1.cxx:150
Muon.h
TrigCompositeUtils::newDecisionIn
Decision * newDecisionIn(DecisionContainer *dc, const std::string &name)
Helper method to create a Decision object, place it in the container and return a pointer to it.
Definition: TrigCompositeUtilsRoot.cxx:46
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
TrigBmuxComboHypo::m_BsToDs_LxyBs
Gaudi::Property< float > m_BsToDs_LxyBs
Definition: TrigBmuxComboHypo.h:287
xAOD::TrigBphys_v1::level
levelType level() const
accessor method: level Type
xAOD::TrigBphys_v1::BS2DSMUX
@ BS2DSMUX
Definition: TrigBphys_v1.h:76
xAOD::TrigBphys_v1::setLowerChainLink
void setLowerChainLink(const ElementLink< xAOD::TrigBphysContainer_v1 > &link)
set method: link to lowerChain decay particle
Trk::VxSecVertexInfo::vertices
const std::vector< xAOD::Vertex * > & vertices() const
Definition: VxSecVertexInfo.cxx:100
met::DeltaR
@ DeltaR
Definition: METRecoCommon.h:11
TrigBmuxComboHypo::m_BdToD_chi2
Gaudi::Property< float > m_BdToD_chi2
Definition: TrigBmuxComboHypo.h:263
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
xAOD::TrigBphys_v1::setFitz
void setFitz(float FitZ)
set method: z position of vertex
ViewHelper::makeHandle
SG::ReadHandle< T > makeHandle(const SG::View *view, const SG::ReadHandleKey< T > &rhKey, const EventContext &context)
navigate from the TrigComposite to nearest view and fetch object from it
Definition: ViewHelper.h:258
xAOD::TrigBphys_v1::particleType
pType particleType() const
accessor method: particle Type
PDG20::mMuon
static constexpr double mMuon
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:12
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
xAOD::TrigBphys_v1::fitx
float fitx() const
accessor method: x position of vertex
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
test_pyathena.pt
pt
Definition: test_pyathena.py:11
TrigBmuxComboHypo::m_BsToDs_minKaonPt
Gaudi::Property< double > m_BsToDs_minKaonPt
Definition: TrigBmuxComboHypo.h:273
TrigBmuxComboHypo::isInMassRange
bool isInMassRange(double mass, const std::pair< double, double > &range) const
Checks that the given mass value falls into the specified range.
Definition: TrigBmuxComboHypo.h:177
Trk::z0
@ z0
Definition: ParamDefs.h:70
TrigBmuxComboHypo::m_BdToD_minDPt
Gaudi::Property< double > m_BdToD_minDPt
Definition: TrigBmuxComboHypo.h:257
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TrigBmuxComboHypo::execute
virtual StatusCode execute(const EventContext &context) const override
Definition: TrigBmuxComboHypo.cxx:98
TrigCompositeUtils::comboHypoAlgNodeName
const std::string & comboHypoAlgNodeName()
Definition: TrigCompositeUtilsRoot.cxx:910
TrigCompositeUtils::createAndStore
SG::WriteHandle< DecisionContainer > createAndStore(const SG::WriteHandleKey< DecisionContainer > &key, const EventContext &ctx)
Creates and right away records the DecisionContainer with the key.
Definition: TrigCompositeUtilsRoot.cxx:30
TrigBmuxComboHypo::m_BToD0_LxyD0
Gaudi::Property< float > m_BToD0_LxyD0
Definition: TrigBmuxComboHypo.h:247
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
xAOD::TrigBphys_v1::mass
float mass() const
accessor method: mass
TrigBmuxComboHypo::kDs
@ kDs
Definition: TrigBmuxComboHypo.h:100
TrigBmuxComboHypo::kLambdaC
@ kLambdaC
Definition: TrigBmuxComboHypo.h:102
xAOD::TrigBphys_v1::BD2DMMUX
@ BD2DMMUX
Definition: TrigBphys_v1.h:74
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:214
Trk::VxCascadeInfo::nDoF
int nDoF() const
Definition: VxCascadeInfo.h:133
TrigBmuxComboHypo::m_LambdaBToLambdaC_LxyLc
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLc
Definition: TrigBmuxComboHypo.h:311
xAOD::TrigBphys_v1::UNKNOWNPTYPE
@ UNKNOWNPTYPE
Definition: TrigBphys_v1.h:78
ITrigBphysState::beamSpotPosition
Amg::Vector3D beamSpotPosition() const
Definition: ITrigBphysState.h:47
TrigBphysAuxContainer.h
ViewHelper.h
TrigBmuxComboHypo::fillTriggerObject
StatusCode fillTriggerObject(xAOD::TrigBphys &triggerObject, xAOD::TrigBphys::pType type, const xAOD::Vertex &vertex, const std::vector< double > &trkMass) const
Fill the trigger object that may be stored for debugging or matching.
Definition: TrigBmuxComboHypo.cxx:594
TrigBmuxComboHypo::m_BToD0_minDstarPt
Gaudi::Property< double > m_BToD0_minDstarPt
Definition: TrigBmuxComboHypo.h:229
TrigBmuxComboHypo.h
TrigBmuxComboHypo::m_roiEtaWidth
Gaudi::Property< double > m_roiEtaWidth
Definition: TrigBmuxComboHypo.h:209
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
xAOD::TrigBphys_v1::pt
float pt() const
accessor method: pt
Definition: TrigBphys_v1.cxx:362
ComboHypo
Definition: ComboHypo.h:30
TrigBmuxComboHypo::m_BsToDs_chi2
Gaudi::Property< float > m_BsToDs_chi2
Definition: TrigBmuxComboHypo.h:285
TrigBmuxComboHypo::m_LambdaBToLambdaC
Gaudi::Property< bool > m_LambdaBToLambdaC
Definition: TrigBmuxComboHypo.h:293
TrigBmuxComboHypo::m_trigBphysContainerKey
SG::WriteHandleKey< xAOD::TrigBphysContainer > m_trigBphysContainerKey
Definition: TrigBmuxComboHypo.h:195
xAOD::TrigBphys_v1::setFitndof
void setFitndof(int FitNdof)
set method: ndof from vertex fit
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
TrigBmuxComboHypo::kDstar
@ kDstar
Definition: TrigBmuxComboHypo.h:99
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
TrigBmuxComboHypo::m_BToD0_minD0Pt
Gaudi::Property< double > m_BToD0_minD0Pt
Definition: TrigBmuxComboHypo.h:227
TrigBmuxComboHypo::m_vertexPointEstimator
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
Definition: TrigBmuxComboHypo.h:315
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
TrigBmuxComboHypo::TrigBmuxComboHypo
TrigBmuxComboHypo()=delete
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TrigBmuxComboHypo::m_BToD0_D0MassRange
Gaudi::Property< std::pair< double, double > > m_BToD0_D0MassRange
Definition: TrigBmuxComboHypo.h:237
TrigBmuxComboHypo::m_fitAttemptsBreakThreshold
Gaudi::Property< size_t > m_fitAttemptsBreakThreshold
Definition: TrigBmuxComboHypo.h:215
TrigBmuxComboHypo::m_trackToVertexTool
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
Definition: TrigBmuxComboHypo.h:319
TrigBmuxComboHypo::m_BToD0
Gaudi::Property< bool > m_BToD0
Definition: TrigBmuxComboHypo.h:219
xAOD::TrigBphys_v1::setFitmass
void setFitmass(float FitMass)
set method: mass from vertex fit
TrigBmuxComboHypo::m_BsToDs_phiMassRange
Gaudi::Property< std::pair< double, double > > m_BsToDs_phiMassRange
Definition: TrigBmuxComboHypo.h:281
TrigBmuxState::addTriggerObject
xAOD::TrigBphys * addTriggerObject(size_t muonIndex)
Definition: TrigBmuxComboHypo.h:64
TrigBmuxComboHypo::m_fitAttemptsWarningThreshold
Gaudi::Property< size_t > m_fitAttemptsWarningThreshold
Definition: TrigBmuxComboHypo.h:213
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
TrigBmuxComboHypo::Decay
Decay
Definition: TrigBmuxComboHypo.h:97
lumiFormat.i
int i
Definition: lumiFormat.py:92
ComboHypo::hypoTools
ToolHandleArray< ComboHypoToolBase > & hypoTools()
Definition: ComboHypo.h:44
ITrigBphysState::context
const EventContext & context() const
Definition: ITrigBphysState.h:42
xAOD::TrigBphys_v1::setFity
void setFity(float FitY)
set method: y position of vertex
TrigBmuxComboHypo::m_cascadeChi2
Gaudi::Property< float > m_cascadeChi2
Definition: TrigBmuxComboHypo.h:203
TrigBmuxComboHypo::kDplus
@ kDplus
Definition: TrigBmuxComboHypo.h:101
TrigBmuxComboHypo::m_BsToDs
Gaudi::Property< bool > m_BsToDs
Definition: TrigBmuxComboHypo.h:271
TrigBmuxState::addTriggerObjects
std::vector< xAOD::TrigBphys * > addTriggerObjects(size_t n, size_t muonIndex)
Definition: TrigBmuxComboHypo.h:70
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TrigBphys.h
TrigBmuxComboHypo::getTrkImpactParameterZ0
double getTrkImpactParameterZ0(const EventContext &ctx, const xAOD::TrackParticle &track, const Amg::Vector3D &vertex) const
Returns the longitudinal impact parameter z0 of the track w.r.t.
Definition: TrigBmuxComboHypo.cxx:708
master.flag
bool flag
Definition: master.py:29
TrigBmuxComboHypo::m_trkZ0
Gaudi::Property< double > m_trkZ0
Definition: TrigBmuxComboHypo.h:207
Trk::VxCascadeInfo::fitChi2
double fitChi2() const
Definition: VxCascadeInfo.h:134
TrigBmuxState
State class for TrigBmuxComboHypo algorithm.
Definition: TrigBmuxComboHypo.h:45
ClassID_traits
Default, invalid implementation of ClassID_traits.
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:40
xAOD::TrigBphys_v1::setMass
void setMass(float)
Set the mass of the object.
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
xAOD::TrigBphys_v1::roiId
uint32_t roiId() const
accessor method: ID of L1 RoI
TrigCompositeUtils::decisionToElementLink
ElementLink< DecisionContainer > decisionToElementLink(const Decision *d, const EventContext &ctx)
Takes a raw pointer to a Decision and returns an ElementLink to the Decision.
Definition: TrigCompositeUtilsRoot.cxx:122
xAOD::TauHelpers::trackParticleLinks
std::vector< ElementLink< xAOD::TrackParticleContainer > > trackParticleLinks(const xAOD::TauJet *tau, xAOD::TauJetParameters::TauTrackFlag flag=xAOD::TauJetParameters::TauTrackFlag::classifiedCharged)
Definition: TauxAODHelpers.cxx:22
TrigBmuxComboHypo::m_LambdaBToLambdaC_minProtonPt
Gaudi::Property< double > m_LambdaBToLambdaC_minProtonPt
Definition: TrigBmuxComboHypo.h:295
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::TrigBphys_v1::fitchi2
float fitchi2() const
accessor method: chi2 from vertex fit
xAOD::TrigBphys_v1::B2D0MUX
@ B2D0MUX
Definition: TrigBphys_v1.h:73
ComboHypo::triggerMultiplicityMap
const Combo::MultiplicityReqMap & triggerMultiplicityMap() const
Definition: ComboHypo.h:42
xAOD::TrackParticle_v1::genvecP4
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
Definition: TrackParticle_v1.cxx:116
Trk::ParametersBase
Definition: ParametersBase.h:55
TrigBmuxComboHypo::m_BsToDs_DsMassRange
Gaudi::Property< std::pair< double, double > > m_BsToDs_DsMassRange
Definition: TrigBmuxComboHypo.h:283
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::TrigBphys_v1::fitmass
float fitmass() const
accessor method: mass from vertex fit
xAOD::TrigBphys_v1::fitz
float fitz() const
accessor method: z position of vertex
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
Vertex.h
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
PDG20::mProton
static constexpr double mProton
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:19
TrigBmuxComboHypo::m_BdToD_DMassRange
Gaudi::Property< std::pair< double, double > > m_BdToD_DMassRange
Definition: TrigBmuxComboHypo.h:261
TrigBmuxComboHypo::fit
std::unique_ptr< xAOD::Vertex > fit(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
Perform a vertex fit on selected tracks.
Definition: TrigBmuxComboHypo.cxx:481
xAOD::TrigBphys_v1::initialise
void initialise()
Definition: TrigBphys_v1.cxx:22
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:886
ComboHypo::initialize
virtual StatusCode initialize() override
Definition: ComboHypo.cxx:23
TrigBmuxComboHypo::m_BToD0_LxyBd
Gaudi::Property< float > m_BToD0_LxyBd
Definition: TrigBmuxComboHypo.h:245
TrigBmuxComboHypo::createDecisionObjects
StatusCode createDecisionObjects(TrigBmuxState &) const
Definition: TrigBmuxComboHypo.cxx:447
xAOD::TrigBphys_v1::setTrackParticleLinks
void setTrackParticleLinks(const std::vector< ElementLink< TrackParticleContainer > > &links)
Set the track particle links on the object.
TrigBmuxComboHypo::initialize
virtual StatusCode initialize() override
Definition: TrigBmuxComboHypo.cxx:53
TrigBmuxComboHypo::m_makeCascadeFit
Gaudi::Property< bool > m_makeCascadeFit
Definition: TrigBmuxComboHypo.h:201
TrigBmuxState::trigBphysMuonIndices
std::vector< size_t > trigBphysMuonIndices
Definition: TrigBmuxComboHypo.h:62
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
xAOD::TrigBphys_v1::EF
@ EF
Definition: TrigBphys_v1.h:85
TrigBmuxComboHypo::m_LambdaBToLambdaC_LxyLb
Gaudi::Property< float > m_LambdaBToLambdaC_LxyLb
Definition: TrigBmuxComboHypo.h:309
Trk::trkMass
@ trkMass
Extended perigee: mass.
Definition: ParamDefs.h:87
TrigBmuxState::muons
std::vector< Muon > muons
Definition: TrigBmuxComboHypo.h:61
TrigCompositeUtils::Decision
xAOD::TrigComposite Decision
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:20
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TrigBmuxComboHypo::m_BToD0_massRange
Gaudi::Property< std::pair< double, double > > m_BToD0_massRange
Definition: TrigBmuxComboHypo.h:235
item
Definition: ItemListSvc.h:43
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
TrigBmuxComboHypo::fitCascade
std::unique_ptr< Trk::VxCascadeInfo > fitCascade(const EventContext &context, const std::vector< ElementLink< xAOD::TrackParticleContainer >> &trackParticleLinks, Decay decay) const
Perform a cascade vertex fit on selected tracks.
Definition: TrigBmuxComboHypo.cxx:529
Trk::VxCascadeInfo::getParticleMoms
const std::vector< std::vector< TLorentzVector > > & getParticleMoms() const
Definition: VxCascadeInfo.h:131
xAOD::TrigBphys_v1::phi
float phi() const
accessor method: phi
ITrigBphysState::previousDecisions
const TrigCompositeUtils::DecisionContainer & previousDecisions() const
Definition: ITrigBphysState.h:43
TrigCompositeUtils::createLegName
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
Definition: TrigCompositeUtilsRoot.cxx:166
VxCascadeInfo.h
TrackParticle.h
TrigBmuxComboHypo::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition: TrigBmuxComboHypo.h:321
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
TrigCompositeUtils::seedString
const std::string & seedString()
Definition: TrigCompositeUtilsRoot.cxx:890
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
TrigBmuxComboHypo::m_BToD0_chi2
Gaudi::Property< float > m_BToD0_chi2
Definition: TrigBmuxComboHypo.h:241
VertexContainer.h
TrigBmuxComboHypo::fillTriggerObjects
StatusCode fillTriggerObjects(std::vector< xAOD::TrigBphys * > &triggerObjects, xAOD::TrigBphys::pType type, const Trk::VxCascadeInfo &vxCascadeInfo, const Amg::Vector3D &beamSpotPosition) const
Fill the trigger object that may be stored for debugging or matching for a cascade vertex.
Definition: TrigBmuxComboHypo.cxx:641
TrigCompositeUtils::DecisionIDContainer
std::set< DecisionID > DecisionIDContainer
Definition: TrigComposite_v1.h:28
TrigBmuxComboHypo::Lxy
double Lxy(const Amg::Vector3D &productionVertex, const Amg::Vector3D &decayVertex, const std::vector< TLorentzVector > &momenta) const
Returns the transverse decay length of a particle Lxy in [mm].
Definition: TrigBmuxComboHypo.cxx:715
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
xAOD::Vertex_v1::chiSquared
float chiSquared() const
Returns the of the vertex fit as float.
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
TrigBmuxComboHypo::m_BToD0_minDstarPionPt
Gaudi::Property< double > m_BToD0_minDstarPionPt
Definition: TrigBmuxComboHypo.h:231
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigBmuxComboHypo::m_BsToDs_LxyDs
Gaudi::Property< float > m_BsToDs_LxyDs
Definition: TrigBmuxComboHypo.h:289
TrigBmuxComboHypo::m_BToD0_makeDstar
Gaudi::Property< bool > m_BToD0_makeDstar
Definition: TrigBmuxComboHypo.h:221
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TrigBmuxComboHypo::m_BToD0_LxyB
Gaudi::Property< float > m_BToD0_LxyB
Definition: TrigBmuxComboHypo.h:243
TrigBmuxComboHypo::m_BToD0_minD0PionPt
Gaudi::Property< double > m_BToD0_minD0PionPt
Definition: TrigBmuxComboHypo.h:225
TrigBmuxComboHypo::m_BdToD_LxyD
Gaudi::Property< float > m_BdToD_LxyD
Definition: TrigBmuxComboHypo.h:267
TrigBmuxComboHypo::isInSameRoI
bool isInSameRoI(const xAOD::Muon *, const xAOD::TrackParticle *) const
Checks that the given track is close enough to the muon, i.e.
Definition: TrigBmuxComboHypo.cxx:700
DEBUG
#define DEBUG
Definition: page_access.h:11
TrigBmuxComboHypo::m_roiPhiWidth
Gaudi::Property< double > m_roiPhiWidth
Definition: TrigBmuxComboHypo.h:211
TrigBmuxComboHypo::m_trackParticleContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
Definition: TrigBmuxComboHypo.h:191
TrigBmuxComboHypo::m_BToD0_maxDstarPionZ0
Gaudi::Property< double > m_BToD0_maxDstarPionZ0
Definition: TrigBmuxComboHypo.h:233
ITrigBphysState::decisions
TrigCompositeUtils::DecisionContainer & decisions()
Definition: ITrigBphysState.h:44
HLTIdentifier.h
TrigBmuxComboHypo::isIdenticalTracks
bool isIdenticalTracks(const xAOD::TrackParticle *lhs, const xAOD::TrackParticle *rhs) const
Returns false for the tracks with opposite charges.
Definition: TrigBmuxComboHypo.cxx:693
TrigBmuxComboHypo::m_BToD0_DstarMassRange
Gaudi::Property< std::pair< double, double > > m_BToD0_DstarMassRange
Definition: TrigBmuxComboHypo.h:239
PDG20::mPion
static constexpr double mPion
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:13
TrigCompositeUtils::decisionIDs
void decisionIDs(const Decision *d, DecisionIDContainer &destination)
Extracts DecisionIDs stored in the Decision object.
Definition: TrigCompositeUtilsRoot.cxx:67
charge3
int charge3(const T &p)
Definition: AtlasPID.h:493
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
TrigBmuxComboHypo::m_BsToDs_minDsPt
Gaudi::Property< double > m_BsToDs_minDsPt
Definition: TrigBmuxComboHypo.h:277
TrigBmuxComboHypo::m_LambdaBToLambdaC_minPionPt
Gaudi::Property< double > m_LambdaBToLambdaC_minPionPt
Definition: TrigBmuxComboHypo.h:299
ComboHypo::decisionsInput
const SG::ReadHandleKeyArray< TrigCompositeUtils::DecisionContainer > & decisionsInput() const
Definition: ComboHypo.h:40
TrigCompositeUtils::roiString
const std::string & roiString()
Definition: TrigCompositeUtilsRoot.cxx:878
TrigBmuxComboHypo::m_LambdaBToLambdaC_massRange
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_massRange
Definition: TrigBmuxComboHypo.h:303
PDG20::mKaon
static constexpr double mKaon
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:15
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
TrigBmuxComboHypo::m_BdToD_LxyBd
Gaudi::Property< float > m_BdToD_LxyBd
Definition: TrigBmuxComboHypo.h:265
xAOD::TrigBphys_v1::fity
float fity() const
accessor method: y position of vertex
View.h
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
xAOD::TrigBphys_v1::lxy
float lxy() const
accessor method: lxy
Definition: TrigBphys_v1.cxx:387
xAOD::TrigBphys_v1::eta
float eta() const
accessor method: eta
TrigBphysContainer.h
xAOD::TrigBphys_v1::DZKPI
@ DZKPI
Definition: TrigBphys_v1.h:69
TrigBmuxComboHypo::kD0
@ kD0
Definition: TrigBmuxComboHypo.h:98
PDG20::mD0
static constexpr double mD0
Definition: Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h:18
TrigBmuxComboHypo::m_allowedIDs
TrigCompositeUtils::DecisionIDContainer m_allowedIDs
Definition: TrigBmuxComboHypo.h:324
TrigBmuxComboHypo::m_BToD0_minD0KaonPt
Gaudi::Property< double > m_BToD0_minD0KaonPt
Definition: TrigBmuxComboHypo.h:223
TrigCompositeUtils::isAnyIDPassing
bool isAnyIDPassing(const Decision *d, const DecisionIDContainer &required)
Checks if any of the DecisionIDs passed in arg required is availble in Decision object.
Definition: TrigCompositeUtilsRoot.cxx:108
xAOD::TrigBphys_v1::LB2LCMUX
@ LB2LCMUX
Definition: TrigBphys_v1.h:77
TrigBmuxComboHypo::m_BsToDs_minPionPt
Gaudi::Property< double > m_BsToDs_minPionPt
Definition: TrigBmuxComboHypo.h:275
TrigComposite.h
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TrigCompositeUtils::viewString
const std::string & viewString()
Definition: TrigCompositeUtilsRoot.cxx:882
TrigBmuxComboHypo::m_LambdaBToLambdaC_LambdaCMassRange
Gaudi::Property< std::pair< double, double > > m_LambdaBToLambdaC_LambdaCMassRange
Definition: TrigBmuxComboHypo.h:305
xAOD::TrigBphys_v1::fitndof
int fitndof() const
accessor method: ndof from vertex fit
xAOD::TrigBphys_v1
Class describing a Bphysics online composite object.
Definition: TrigBphys_v1.h:44
xAOD::TrigBphys_v1::pType
pType
enum for different particle types
Definition: TrigBphys_v1.h:48
AuxElement.h
Base class for elements of a container that can have aux data.
VertexAuxContainer.h
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
ITrigBphysState::trigBphysCollection
xAOD::TrigBphysContainer & trigBphysCollection()
Definition: ITrigBphysState.h:45
TrigBmuxComboHypo::m_LambdaBToLambdaC_minLambdaCPt
Gaudi::Property< double > m_LambdaBToLambdaC_minLambdaCPt
Definition: TrigBmuxComboHypo.h:301
TrigBmuxComboHypo::m_BsToDs_massRange
Gaudi::Property< std::pair< double, double > > m_BsToDs_massRange
Definition: TrigBmuxComboHypo.h:279
TrigBmuxComboHypo::m_BdToD
Gaudi::Property< bool > m_BdToD
Definition: TrigBmuxComboHypo.h:251
drawFromPickle.view
view
Definition: drawFromPickle.py:294
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
xAOD::TrigBphys_v1::setFitx
void setFitx(float FitX)
set method: x position of vertex