Skip to content
Snippets Groups Projects
Commit 296bcddf authored by Sylvester Joosten's avatar Sylvester Joosten
Browse files

new EICD builds properly, ready for comments

parent be02b47f
No related branches found
No related tags found
1 merge request!33Draft: Streamline data model
Pipeline #14406 failed
#ifndef EICD_HELPERS_HH
#define EICD_HELPERS_HH
#include <algorithm>
#include <cmath>
#include <exception>
......@@ -11,33 +10,36 @@
#include <Math/Vector4D.h>
#include "eicd/TrackParametersCollection.h"
#include "eicd/ReconstructedParticleCollection.h"
#include "eicd/ReconstructedParticleData.h"
#include "eicd/TrackParametersCollection.h"
namespace eicd::helpers {
/** Four momentum from track and mass.
* Get a vector of 4-momenta from raw tracking info, using an externally
* provided particle mass assumption.
*/
inline auto momenta_from_tracking(const std::vector<eic::TrackParametersData>& tracks,
const double mass)
{
std::vector<ROOT::Math::PxPyPzMVector> momenta{tracks.size()};
// transform our raw tracker info into proper 4-momenta
std::transform(tracks.begin(), tracks.end(), momenta.begin(), [mass](const auto& track) {
// make sure we don't divide by zero
if (fabs(track.qOverP) < 1e-9) {
return ROOT::Math::PxPyPzMVector{};
}
const double p = fabs(1. / track.qOverP);
const double px = p * cos(track.phi) * sin(track.theta);
const double py = p * sin(track.phi) * sin(track.theta);
const double pz = p * cos(track.theta);
return ROOT::Math::PxPyPzMVector{px, py, pz, mass};
});
return momenta;
}
/** Four momentum from track and mass.
* Get a vector of 4-momenta from raw tracking info, using an externally
* provided particle mass assumption.
*/
inline auto
momenta_from_tracking(const std::vector<eic::TrackParametersData>& tracks,
const double mass) {
std::vector<ROOT::Math::PxPyPzMVector> momenta{tracks.size()};
// transform our raw tracker info into proper 4-momenta
std::transform(
tracks.begin(), tracks.end(), momenta.begin(), [mass](const auto& track) {
// make sure we don't divide by zero
if (fabs(track.qOverP) < 1e-9) {
return ROOT::Math::PxPyPzMVector{};
}
const double p = fabs(1. / track.qOverP);
const double px =
p * cos(track.direction.phi) * sin(track.direction.theta);
const double py =
p * sin(track.direction.phi) * sin(track.direction.theta);
const double pz = p * cos(track.direction.theta);
return ROOT::Math::PxPyPzMVector{px, py, pz, mass};
});
return momenta;
}
} // namespace eicd::helpers
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment