EICd
EIC data model
helpers.h
Go to the documentation of this file.
1 #ifndef EICD_HELPERS_HH
2 #define EICD_HELPERS_HH
3 
4 
5 #include <algorithm>
6 #include <cmath>
7 #include <exception>
8 #include <limits>
9 #include <string>
10 #include <vector>
11 
12 #include <Math/Vector4D.h>
13 
17 
18 namespace eicd::helpers {
19 
20  /** Four momentum from track and mass.
21  * Get a vector of 4-momenta from raw tracking info, using an externally
22  * provided particle mass assumption.
23  */
24  inline auto momenta_from_tracking(const std::vector<eic::TrackParametersData>& tracks,
25  const double mass)
26  {
27  std::vector<ROOT::Math::PxPyPzMVector> momenta{tracks.size()};
28  // transform our raw tracker info into proper 4-momenta
29  std::transform(tracks.begin(), tracks.end(), momenta.begin(), [mass](const auto& track) {
30  // make sure we don't divide by zero
31  if (fabs(track.qOverP) < 1e-9) {
32  return ROOT::Math::PxPyPzMVector{};
33  }
34  const double p = fabs(1. / track.qOverP);
35  const double px = p * cos(track.direction.phi) * sin(track.direction.theta);
36  const double py = p * sin(track.direction.phi) * sin(track.direction.theta);
37  const double pz = p * cos(track.direction.theta);
38  return ROOT::Math::PxPyPzMVector{px, py, pz, mass};
39  });
40  return momenta;
41  }
42 } // namespace eicd::helpers
43 #endif
eicd::helpers
Definition: helpers.h:18
TrackParametersCollection.h
ReconstructedParticleCollection.h
eicd::helpers::momenta_from_tracking
auto momenta_from_tracking(const std::vector< eic::TrackParametersData > &tracks, const double mass)
Definition: helpers.h:24
ReconstructedParticleData.h