12 #include <tracking/spacePointCreation/SpacePoint.h>
13 #include <svd/dataobjects/SVDCluster.h>
14 #include <tracking/trackFindingVXD/utilities/Named.h>
15 #include <tracking/trackFindingVXD/variableExtractors/VariableExtractor.h>
24 class ClusterInfoExtractor :
public VariableExtractor {
48 std::vector<SVDCluster const*> clusters;
49 clusters.reserve(spacePoints.size() * 2);
51 for (SpacePoint
const* sp : spacePoints) {
52 RelationVector<SVDCluster> relatedClusters = sp->getRelationsTo<SVDCluster>(
"");
53 for (
const SVDCluster& cluster : relatedClusters) {
54 clusters.push_back(&cluster);
58 std::vector<float> values(clusters.size());
59 for (
unsigned int i = 0; i < clusters.size(); ++i) {
60 values[i] = clusters[i]->getCharge();
64 for (
unsigned int i = 0; i < clusters.size(); ++i) {
65 values[i] = clusters[i]->getSeedCharge();
70 for (
unsigned int i = 0; i < clusters.size(); ++i) {
71 values[i] = clusters[i]->getSize();
76 for (
unsigned int i = 0; i < clusters.size(); ++i) {
77 values[i] = clusters[i]->getCharge() / clusters[i]->getSize();
82 for (
unsigned int i = 0; i < clusters.size(); ++i) {
83 values[i] = clusters[i]->getClsTime();
87 for (
unsigned int i = 0; i < clusters.size(); ++i) {
88 values[i] = clusters[i]->getClsTimeSigma();
100 void initializeStats(
const std::string& identifier, std::vector<Named<float*>>& variables)
110 void setStats(
const std::string& identifier, std::vector<float>& values)
112 short size = values.size();
113 if (values.size() == 0) {
122 float sum = std::accumulate(values.begin(), values.end(), 0.0);
124 float mean = sum / size;
127 float variance = std::accumulate(values.begin(), values.end(), 0.0,
128 [mean, size](
float x,
float y) {return x + ((y - mean) * (y - mean)) / (size - 1);});
129 float stddev = std::sqrt(variance);
132 float min = *(std::min_element(values.begin(), values.end()));
133 float max = *(std::max_element(values.begin(), values.end()));