ATLAS Offline Software
BPhysBGammaFinder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "GaudiKernel/IPartPropSvc.h"
14 
15 
17 
18 namespace DerivationFramework {
19 
20 BPhysBGammaFinder::BPhysBGammaFinder(const std::string& t, const std::string& n, const IInterface* p)
21  : AthAlgTool(t,n,p),
22  m_v0Tools("Trk::V0Tools"),
23  m_vertexFitter("Trk::TrkVKalVrtFitter"),
24  m_vertexEstimator("InDet::VertexPointEstimator"),
25  m_inputTrackParticleContainerName("InDetTrackParticles"),
26  m_inputLowPtTrackContainerName("LowPtRoITrackParticles"),
27  m_conversionContainerName("BPhysConversionCandidates"),
28  m_maxDistBetweenTracks(10.0),
29  m_maxDeltaCotTheta(0.3),
30  m_requireDeltaQ(true),
31  m_use_low_pT(false),
32  m_maxDeltaQ(1000.0),
33  m_Chi2Cut(20.0),
34  m_maxGammaMass(100.0) {
35 
36  declareInterface<DerivationFramework::IAugmentationTool>(this);
37 
38  // Declare user-defined properties
39  declareProperty("BVertexContainers", m_BVertexCollectionsToCheck);
40  declareProperty("PassFlagsToCheck", m_passFlagsToCheck);
41  declareProperty("V0Tools", m_v0Tools);
42  declareProperty("VertexFitterTool", m_vertexFitter);
43  declareProperty("VertexEstimator", m_vertexEstimator);
44  declareProperty("InputTrackParticleContainerName", m_inputTrackParticleContainerName);
45  declareProperty("InputLowPtTrackContainerName", m_inputLowPtTrackContainerName);
46  declareProperty("ConversionContainerName", m_conversionContainerName);
47  declareProperty("MaxDistBetweenTracks", m_maxDistBetweenTracks = 10.0); // Maximum allowed distance of minimum approach
48  declareProperty("MaxDeltaCotTheta", m_maxDeltaCotTheta = 0.3); // Maximum allowed dCotTheta between tracks
49  declareProperty("RequireDeltaQ", m_requireDeltaQ = true); // Only save a conversions if it's a chi_c,b candidate (must then pass "MaxDeltaM" requirement), if "False" all conversions in the event will be saved
50  declareProperty("Use_low_pT", m_use_low_pT = false); // Only save a conversions if it's a chi_c,b candidate (must then pass "MaxDeltaM" requirement), if "False" all conversions in the event will be saved
51  declareProperty("MaxDeltaQ", m_maxDeltaQ = 700.0); // Maximum mass difference between di-muon+conversion and di-muon
52  declareProperty("Chi2Cut", m_Chi2Cut = 20.0);
53  declareProperty("MaxGammaMass", m_maxGammaMass = 100.0);
54 }
55 
56 
58 
59  ATH_MSG_DEBUG("in initialize()");
60 
61  ATH_CHECK( m_v0Tools.retrieve() );
62  ATH_CHECK( m_vertexFitter.retrieve() );
63  ATH_CHECK( m_vertexEstimator.retrieve() );
64  return StatusCode::SUCCESS;
65 }
66 
67 
69  return StatusCode::SUCCESS;
70 }
71 
72 
74 
75  std::vector<const xAOD::Vertex*> BVertices;
76  BVertices.clear();
77  std::vector<const xAOD::TrackParticle*> BVertexTracks;
78 
79 
80  // Output conversion container
81  std::unique_ptr<xAOD::VertexContainer> conversionContainer(new xAOD::VertexContainer());
82  std::unique_ptr<xAOD::VertexAuxContainer> conversionAuxContainer(new xAOD::VertexAuxContainer());
83  conversionContainer->setStore(conversionAuxContainer.get());
84 
85  // Retrieve track particles from StoreGate
86  const xAOD::TrackParticleContainer* inputTrackParticles = nullptr;
88  ATH_MSG_DEBUG( "Track particle container size " << inputTrackParticles->size() );
89  // Low pT collection
90  const xAOD::TrackParticleContainer* lowPtTrackParticles = nullptr;
91  if (m_use_low_pT) {
92  StatusCode sc = evtStore()->retrieve(lowPtTrackParticles, m_inputLowPtTrackContainerName);
93  if (sc.isFailure()) {
94  ATH_MSG_WARNING("No low pT collection with key " << m_inputLowPtTrackContainerName << " found in StoreGate.");
95  return StatusCode::SUCCESS;;
96  }
97  else {
98  ATH_MSG_DEBUG("Low pT track particle container size " << lowPtTrackParticles->size());
99  }
100  }
101 
102  // Look for B candidate
103  if (m_BVertexCollectionsToCheck.empty()) {
104  ATH_MSG_FATAL( "No B vertex collections provided" );
105  return StatusCode::FAILURE;
106  }
107  else {
108  for ( auto itr = m_BVertexCollectionsToCheck.begin(); itr != m_BVertexCollectionsToCheck.end(); ++itr) {
109  ATH_MSG_DEBUG( "Using " << *itr << " as the source B vertex collection" );
110  }
111  }
112 
113  // Retrieve vertex containers
114  for (auto itr = m_BVertexCollectionsToCheck.begin(); itr!=m_BVertexCollectionsToCheck.end(); ++itr) {
115  // retieve vertex
116  const xAOD::VertexContainer* BVtxContainer = nullptr;
117  CHECK( evtStore()->retrieve(BVtxContainer, *itr));
118  ATH_MSG_DEBUG( "Vertex Container (" << *itr << ") contains " << BVtxContainer->size() << " vertices" );
119 
120  static const SG::Decorator< std::vector< VertexLink > > BGammaLinks( "BGammaLinks" );
121  static const std::vector< VertexLink > vertexLinks;
122 
123  for (const xAOD::Vertex* vertex : *BVtxContainer) {
124  BGammaLinks(*vertex) = vertexLinks;
125 
126  bool passedHypothesis = false;
127  BVertexTracks.clear();
128 
129  for (const auto &flag : m_passFlagsToCheck) {
131  bool pass = acc(*vertex);
132  if (pass) passedHypothesis = true;
133  }
134 
135  if (!passedHypothesis) continue;
136  xAOD::BPhysHypoHelper Bc("Bc", vertex);
137 
138  // link to Bc+ vertex
139  std::vector<const xAOD::Vertex*> precedingVertices(1, vertex);
140 
141  // Collect up B-vertex tracks
142  for (size_t i = 0; i < vertex->nTrackParticles(); ++i) BVertexTracks.push_back(vertex->trackParticle(i));
143 
144  // Track Selection
145  // Track1 Loop
146  for (xAOD::TrackParticleContainer::const_iterator tpIt1 = inputTrackParticles->begin(); tpIt1 != inputTrackParticles->end(); ++tpIt1) {
147  const xAOD::TrackParticle* trackParticle1 = *tpIt1;
148 
149  auto itr1 = std::find(BVertexTracks.begin(), BVertexTracks.end(), trackParticle1);
150  if (itr1 != BVertexTracks.end()) continue;
151 
152  const Trk::Perigee& trackPerigee1 = trackParticle1->perigeeParameters();
153 
154  // Track2 Loop
155  for (xAOD::TrackParticleContainer::const_iterator tpIt2 = tpIt1 + 1; tpIt2 != inputTrackParticles->end(); ++tpIt2) {
156  const xAOD::TrackParticle* trackParticle2 = *tpIt2;
157  if (trackParticle1 == trackParticle2) continue;
158 
159  auto itr2 = std::find(BVertexTracks.begin(), BVertexTracks.end(), trackParticle2);
160  if (itr2 != BVertexTracks.end()) continue;
161 
162  const Trk::Perigee& trackPerigee2 = trackParticle2->perigeeParameters();
163 
164  // Track pair selection
165  TLorentzVector e1, e2, gamma_m, BcStar;
166  e1.SetPtEtaPhiM(trackParticle1->pt(), trackParticle1->eta(), trackParticle1->phi(), Trk::electron);
167  e2.SetPtEtaPhiM(trackParticle2->pt(), trackParticle2->eta(), trackParticle2->phi(), Trk::electron);
168 
169  gamma_m = e1 + e2;
170  if (gamma_m.M() > m_maxGammaMass) continue;
171 
172  TLorentzVector mu1 = Bc.refTrk(0, Trk::muon);
173  TLorentzVector mu2 = Bc.refTrk(1, Trk::muon);
174  TLorentzVector mu3 = Bc.refTrk(2, Trk::muon);
175 
176  BcStar = mu1 + mu2 + mu3 + e1 + e2;
177  double Q = BcStar.M() - Bc.mass() - 2 * Trk::electron;
178  if (Q > m_maxDeltaQ) continue;
179 
180  // Estimate starting point + cuts on compatiblity of tracks
181  int sflag = 0;
182  int errorcode = 0;
183  Amg::Vector3D startingPoint = m_vertexEstimator->getCirclesIntersectionPoint(&trackPerigee1, &trackPerigee2, sflag, errorcode);
184  if (errorcode != 0) startingPoint = Amg::Vector3D::Zero(3);
185 
186  std::vector<float> RefTrackPx, RefTrackPy, RefTrackPz, RefTrackE;
187  std::vector<float> OrigTrackPx, OrigTrackPy, OrigTrackPz, OrigTrackE;
188 
189  std::vector<const xAOD::TrackParticle*> trackPair;
190  trackPair.clear();
191  trackPair.push_back(trackParticle1);
192  trackPair.push_back(trackParticle2);
193 
194  // Do the vertex fit
195  xAOD::Vertex* convVertexCandidate = m_vertexFitter->fit(trackPair, startingPoint);
196 
197  // Check for successful fit
198  if (convVertexCandidate) {
199  if (convVertexCandidate->chiSquared() / convVertexCandidate->numberDoF() > m_Chi2Cut) continue;
200 
201  xAOD::BPhysHelper Photon(convVertexCandidate);
202  // set link to the parent Bc+ vertex
203  Photon.setPrecedingVertices(precedingVertices, BVtxContainer);
204 
205  // Parameters at vertex
206  convVertexCandidate->clearTracks();
208  newLink1.setElement(*tpIt1);
209  newLink1.setStorableObject(*inputTrackParticles);
211  newLink2.setElement(*tpIt2);
212  newLink2.setStorableObject(*inputTrackParticles);
213  convVertexCandidate->addTrackAtVertex(newLink1);
214  convVertexCandidate->addTrackAtVertex(newLink2);
215 
216  std::vector<Amg::Vector3D> positionList;
217 
218  //Get photon momentum 3-vector
219  Amg::Vector3D momentum = m_v0Tools->V0Momentum(convVertexCandidate);
220 
221  TLorentzVector photon, electron1, electron2, ph;
222  electron1.SetVectM( trackMomentum( convVertexCandidate, 0 ), Trk::electron );
223  electron2.SetVectM( trackMomentum( convVertexCandidate, 1 ), Trk::electron );
224  photon = electron1 + electron2;
225  ph.SetXYZM(momentum.x(), momentum.y(), momentum.z(), 0.);
226 
227  // Use to keep track of which dimuon(s) gave a chi_c/b candidate
228  static const SG::Accessor<std::vector<float> > RefTrackPxAcc("RefTrackPx");
229  static const SG::Accessor<std::vector<float> > RefTrackPyAcc("RefTrackPy");
230  static const SG::Accessor<std::vector<float> > RefTrackPzAcc("RefTrackPz");
231  std::vector<float> B_Px = RefTrackPxAcc(*vertex);
232  std::vector<float> B_Py = RefTrackPyAcc(*vertex);
233  std::vector<float> B_Pz = RefTrackPzAcc(*vertex);
234 
235  TLorentzVector muon1, muon2, muon3;
236  muon1.SetXYZM(B_Px.at(0), B_Py.at(0), B_Pz.at(0), Trk::muon);
237  muon2.SetXYZM(B_Px.at(1), B_Py.at(1), B_Pz.at(1), Trk::muon);
238  muon3.SetXYZM(B_Px.at(2), B_Py.at(2), B_Pz.at(2), Trk::muon);
239 
240  TLorentzVector B_m = muon1 + muon2 + muon3;
241 
242  const double deltaQ = (B_m + photon).M() - Bc.mass() - 2 * Trk::electron;
243  const double mass = photon.M();
244 
245  RefTrackPx.push_back(trackMomentum(convVertexCandidate, 0).Px());
246  RefTrackPx.push_back(trackMomentum(convVertexCandidate, 1).Px());
247 
248  RefTrackPy.push_back(trackMomentum(convVertexCandidate, 0).Py());
249  RefTrackPy.push_back(trackMomentum(convVertexCandidate, 1).Py());
250 
251  RefTrackPz.push_back(trackMomentum(convVertexCandidate, 0).Pz());
252  RefTrackPz.push_back(trackMomentum(convVertexCandidate, 1).Pz());
253 
254  for (size_t i = 0; i < B_Px.size(); i++) {
255  RefTrackPx.push_back(B_Px.at(i));
256  RefTrackPy.push_back(B_Py.at(i));
257  RefTrackPz.push_back(B_Pz.at(i));
258  }
259 
260  RefTrackE.push_back(electron1.E());
261  RefTrackE.push_back(electron2.E());
262  RefTrackE.push_back(muon1.E());
263  RefTrackE.push_back(muon2.E());
264  RefTrackE.push_back(muon3.E());
265 
266  OrigTrackPx.push_back(e1.Px());
267  OrigTrackPx.push_back(e2.Px());
268 
269  OrigTrackPy.push_back(e1.Py());
270  OrigTrackPy.push_back(e2.Py());
271 
272  OrigTrackPz.push_back(e1.Pz());
273  OrigTrackPz.push_back(e2.Pz());
274 
275  OrigTrackE.push_back(e1.E());
276  OrigTrackE.push_back(e2.E());
277 
278 
279  ATH_MSG_DEBUG( "pt = " << photon.Pt() << " ph " << ph.Pt() << " mass " << photon.M() << " px size " << RefTrackPx.size() );
280  ATH_MSG_DEBUG( "Candidate DeltaM = " << (B_m + photon).M() << " MeV DiMuon " << " ( Mass = " << B_m.M() << " MeV )");
281 
282  // Decorate selected conversions
283  ATH_MSG_DEBUG( "Decorating conversion vertices" );
284 
285  static const SG::Accessor<float> pxAcc("px");
286  static const SG::Accessor<float> pyAcc("py");
287  static const SG::Accessor<float> pzAcc("pz");
288  pxAcc(*convVertexCandidate) = momentum.x();
289  pyAcc(*convVertexCandidate) = momentum.y();
290  pzAcc(*convVertexCandidate) = momentum.z();
291 
292  static const SG::Accessor<float> deltaQAcc("deltaQ");
293  static const SG::Accessor<float> gamma_massAcc("gamma_mass");
294  static const SG::Accessor< std::vector<float> > RefTrackEAcc("RefTrackE");
295  deltaQAcc(*convVertexCandidate) = deltaQ;
296  gamma_massAcc(*convVertexCandidate) = mass;
297  RefTrackPxAcc(*convVertexCandidate) = RefTrackPx;
298  RefTrackPyAcc(*convVertexCandidate) = RefTrackPy;
299  RefTrackPzAcc(*convVertexCandidate) = RefTrackPz;
300  RefTrackEAcc(*convVertexCandidate) = RefTrackE;
301 
302  static const SG::Accessor< std::vector<float> > OrigTrackPxAcc("OrigTrackPx");
303  static const SG::Accessor< std::vector<float> > OrigTrackPyAcc("OrigTrackPy");
304  static const SG::Accessor< std::vector<float> > OrigTrackPzAcc("OrigTrackPz");
305  static const SG::Accessor< std::vector<float> > OrigTrackEAcc("OrigTrackE");
306  OrigTrackPxAcc(*convVertexCandidate) = OrigTrackPx;
307  OrigTrackPyAcc(*convVertexCandidate) = OrigTrackPy;
308  OrigTrackPzAcc(*convVertexCandidate) = OrigTrackPz;
309  OrigTrackEAcc(*convVertexCandidate) = OrigTrackE;
310 
311  static const SG::Accessor<Char_t> passed_GammaAcc("passed_Gamma");
312  passed_GammaAcc(*convVertexCandidate) = true; // Used in event skimming
313 
314  conversionContainer->push_back( convVertexCandidate );
315 
316  // add cross-link to the original Bc+ vertex
317  VertexLink BGammaLink;
318  BGammaLink.setElement(convVertexCandidate);
319  BGammaLink.setStorableObject(*conversionContainer);
320  BGammaLinks(*vertex).push_back(std::move(BGammaLink));
321  }
322  else {
323  ATH_MSG_DEBUG( "Vertex Fit Failed" );
324  }
325 
326  } // end of Track2 Loop
327  } // end of Track1 Loop
328 
329  } // end of Bc loop
330 
331  } // end of vertex container loop
332 
333  // Write the results to StoreGate
334  CHECK(evtStore()->record(conversionContainer.release(), m_conversionContainerName));
335  CHECK(evtStore()->record(conversionAuxContainer.release(), m_conversionContainerName + "Aux."));
336 
337  return StatusCode::SUCCESS;
338 }
339 
340 
341 // trackMomentum: returns refitted track momentum
342 TVector3 BPhysBGammaFinder::trackMomentum(const xAOD::Vertex* vxCandidate, int trkIndex) const {
343 
344  double px = 0.;
345  double py = 0.;
346  double pz = 0.;
347  if (vxCandidate) {
348  const Trk::TrackParameters* aPerigee = vxCandidate->vxTrackAtVertex()[trkIndex].perigeeAtVertex();
349  px = aPerigee->momentum()[Trk::px];
350  py = aPerigee->momentum()[Trk::py];
351  pz = aPerigee->momentum()[Trk::pz];
352  }
353 
354  return TVector3(px,py,pz);
355 }
356 
357 } // end of namespace DerivationFramework
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:73
Trk::py
@ py
Definition: ParamDefs.h:66
V0Tools.h
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
xAOD::BPhysHelper
Definition: BPhysHelper.h:71
test_pyathena.px
px
Definition: test_pyathena.py:18
xAOD::VertexAuxContainer_v1
Temporary container used until we have I/O for AuxStoreInternal.
Definition: VertexAuxContainer_v1.h:32
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
DerivationFramework::BPhysBGammaFinder::BPhysBGammaFinder
BPhysBGammaFinder(const std::string &t, const std::string &n, const IInterface *p)
Definition: BPhysBGammaFinder.cxx:20
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:66
DerivationFramework::BPhysBGammaFinder::m_conversionContainerName
std::string m_conversionContainerName
Definition: BPhysBGammaFinder.h:66
egammaEnergyPositionAllSamples::e1
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:77
DerivationFramework::BPhysBGammaFinder::m_BVertexCollectionsToCheck
std::vector< std::string > m_BVertexCollectionsToCheck
Definition: BPhysBGammaFinder.h:57
DerivationFramework::BPhysBGammaFinder::m_maxDistBetweenTracks
float m_maxDistBetweenTracks
Definition: BPhysBGammaFinder.h:68
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
DerivationFramework::BPhysBGammaFinder::trackMomentum
TVector3 trackMomentum(const xAOD::Vertex *vxCandidate, int trkIndex) const
Definition: BPhysBGammaFinder.cxx:342
Trk::pz
@ pz
global momentum (cartesian)
Definition: ParamDefs.h:67
DerivationFramework::BPhysBGammaFinder::m_inputTrackParticleContainerName
std::string m_inputTrackParticleContainerName
Definition: BPhysBGammaFinder.h:64
dqt_zlumi_pandas.mass
mass
Definition: dqt_zlumi_pandas.py:170
Photon
Class describing an photon
TrkVKalVrtFitter.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
DerivationFramework::BPhysBGammaFinder::m_passFlagsToCheck
std::vector< std::string > m_passFlagsToCheck
Definition: BPhysBGammaFinder.h:58
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
xAOD::Vertex_v1::addTrackAtVertex
void addTrackAtVertex(const ElementLink< TrackParticleContainer > &tr, float weight=1.0)
Add a new track to the vertex.
Definition: Vertex_v1.cxx:314
xAOD::BPhysHypoHelper
Definition: BPhysHypoHelper.h:73
xAOD::TrackParticle_v1::perigeeParameters
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
Definition: TrackParticle_v1.cxx:485
xAOD::BPhysHypoHelper::mass
float mass() const
Get invariant mass and its error.
Definition: BPhysHypoHelper.cxx:39
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::electron
@ electron
Definition: ParticleHypothesis.h:27
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
BPhysHypoHelper.h
: B-physcis xAOD helpers.
master.flag
bool flag
Definition: master.py:29
DerivationFramework::BPhysBGammaFinder::m_maxDeltaCotTheta
float m_maxDeltaCotTheta
Definition: BPhysBGammaFinder.h:69
Trk::px
@ px
Definition: ParamDefs.h:65
Amg::pz
@ pz
Definition: GeoPrimitives.h:40
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
xAOD::Vertex_v1::clearTracks
void clearTracks()
Remove all tracks from the vertex.
Definition: Vertex_v1.cxx:331
Trk::ParametersBase
Definition: ParametersBase.h:55
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
DerivationFramework::BPhysBGammaFinder::m_vertexFitter
ToolHandle< Trk::IVertexFitter > m_vertexFitter
Definition: BPhysBGammaFinder.h:61
Trk::muon
@ muon
Definition: ParticleHypothesis.h:28
DerivationFramework::BPhysBGammaFinder::m_maxGammaMass
float m_maxGammaMass
Definition: BPhysBGammaFinder.h:75
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
DerivationFramework::BPhysBGammaFinder::finalize
StatusCode finalize() override
Definition: BPhysBGammaFinder.cxx:68
DerivationFramework::BPhysBGammaFinder::m_vertexEstimator
ToolHandle< InDet::VertexPointEstimator > m_vertexEstimator
Definition: BPhysBGammaFinder.h:62
Amg::py
@ py
Definition: GeoPrimitives.h:39
DerivationFramework::BPhysBGammaFinder::initialize
StatusCode initialize() override
Definition: BPhysBGammaFinder.cxx:57
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
DerivationFramework::BPhysBGammaFinder::addBranches
virtual StatusCode addBranches() const override
Pass the thinning service
Definition: BPhysBGammaFinder.cxx:73
IVertexFitter.h
xAOD::Photon
Photon_v1 Photon
Definition of the current "egamma version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/Photon.h:17
xAOD::Vertex_v1::numberDoF
float numberDoF() const
Returns the number of degrees of freedom of the vertex fit as float.
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
DerivationFramework::BPhysBGammaFinder::m_inputLowPtTrackContainerName
std::string m_inputLowPtTrackContainerName
Definition: BPhysBGammaFinder.h:65
VertexContainer.h
xAOD::photon
@ photon
Definition: TrackingPrimitives.h:199
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
xAOD::BPhysHelper::refTrk
TVector3 refTrk(const size_t index)
Returns i-th refitted track 3-momentum.
Definition: BPhysHelper.cxx:126
egammaEnergyPositionAllSamples::e2
double e2(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 2nd sampling
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DerivationFramework::BPhysBGammaFinder::m_use_low_pT
bool m_use_low_pT
Definition: BPhysBGammaFinder.h:72
DerivationFramework::BPhysBGammaFinder::m_requireDeltaQ
bool m_requireDeltaQ
Definition: BPhysBGammaFinder.h:71
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
BPhysBGammaFinder.h
DerivationFramework::BPhysBGammaFinder::m_Chi2Cut
float m_Chi2Cut
Definition: BPhysBGammaFinder.h:74
xAOD::Vertex_v1::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
Definition: Vertex_v1.cxx:181
AthAlgTool
Definition: AthAlgTool.h:26
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DerivationFramework::BPhysBGammaFinder::m_v0Tools
ToolHandle< Trk::V0Tools > m_v0Tools
Definition: BPhysBGammaFinder.h:60
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
VertexAuxContainer.h
xAOD::TrackParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
DerivationFramework::BPhysBGammaFinder::m_maxDeltaQ
float m_maxDeltaQ
Definition: BPhysBGammaFinder.h:73