Skip to content

Commit f668a22

Browse files
committed
give names to magic numbers
1 parent 3cc0c26 commit f668a22

1 file changed

Lines changed: 27 additions & 19 deletions

File tree

‎Common/Tools/PID/pidTPCModule.h‎

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "Common/TableProducer/PID/pidTPCBase.h" // IWYU pragma: keep
3131
#include "Tools/ML/model.h"
3232

33+
#include <CommonConstants/MathConstants.h>
3334
#include <DataFormatsParameters/GRPLHCIFData.h>
3435
#include <Framework/AnalysisDataModel.h>
3536
#include <Framework/AnalysisHelpers.h>
@@ -445,6 +446,13 @@ class pidTPCModule
445446
template <typename TCCDB, typename M, typename T, typename B>
446447
std::vector<float> createNetworkPrediction(TCCDB& ccdb, soa::Join<aod::Collisions, aod::EvSels> const& collisions, M const& mults, T const& tracks, B const& bcs, const size_t size)
447448
{
449+
constexpr int NParticleTypes = 9;
450+
constexpr double OneToKilo = 1.e-3;
451+
constexpr double MultiplicityNorm = 11000.;
452+
constexpr double HadronicRateNormPp = 1500.;
453+
constexpr double HadronicRateNormAa = 50.;
454+
constexpr double Ft0cOccupancyNorm = 60000.;
455+
constexpr int NumberOfTpcSectors = 18;
448456

449457
std::vector<float> networkPrediction;
450458

@@ -505,7 +513,7 @@ class pidTPCModule
505513
const uint64_t trackPropSize = inputDimensions * size;
506514
const uint64_t predictionSize = outputDimensions * size;
507515

508-
networkPrediction = std::vector<float>(predictionSize * 9); // For each mass hypotheses
516+
networkPrediction = std::vector<float>(predictionSize * NParticleTypes); // For each mass hypotheses
509517
const float nNclNormalization = response->GetNClNormalization();
510518
float durationNetwork = 0;
511519

@@ -520,22 +528,22 @@ class pidTPCModule
520528
for (const auto& collision : collisions) {
521529
const auto& bc = collision.template bc_as<B>();
522530
if (irSource.compare("") != 0) {
523-
hadronicRateForCollision[i] = mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), irSource) * 1.e-3;
531+
hadronicRateForCollision[i] = mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), irSource) * OneToKilo;
524532
} else {
525533
hadronicRateForCollision[i] = 0.0f;
526534
}
527535
i++;
528536
}
529537
auto bc = bcs.begin();
530538
if (irSource.compare("") != 0) {
531-
hadronicRateBegin = mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), irSource) * 1.e-3; // kHz
539+
hadronicRateBegin = mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), irSource) * OneToKilo;
532540
} else {
533541
hadronicRateBegin = 0.0f;
534542
}
535543

536544
// Filling a std::vector<float> to be evaluated by the network
537545
// Evaluation on single tracks brings huge overhead: Thus evaluation is done on one large vector
538-
static constexpr int NParticleTypes = 9;
546+
539547
constexpr int ExpectedInputDimensionsNNV2 = 7;
540548
constexpr int ExpectedInputDimensionsNNV3 = 8;
541549
constexpr int ExpectedInputDimensionsNNV4 = 9;
@@ -556,46 +564,46 @@ class pidTPCModule
556564
trackProperties[counterTrackProps + 1] = trk.tgl();
557565
trackProperties[counterTrackProps + 2] = trk.signed1Pt();
558566
trackProperties[counterTrackProps + 3] = o2::track::pid_constants::sMasses[j];
559-
trackProperties[counterTrackProps + 4] = (trk.has_collision() && mults.size() > 0) ? mults[trk.collisionId()] / 11000. : 1.;
567+
trackProperties[counterTrackProps + 4] = (trk.has_collision() && mults.size() > 0) ? mults[trk.collisionId()] / MultiplicityNorm : 1.;
560568
trackProperties[counterTrackProps + 5] = std::sqrt(nNclNormalization / trk.tpcNClsFound());
561569
if (inputDimensions == ExpectedInputDimensionsNNV2 && networkVersion == NetworkVersionV2) {
562-
trackProperties[counterTrackProps + 6] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / 60000. : 1.;
570+
trackProperties[counterTrackProps + 6] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / Ft0cOccupancyNorm : 1.;
563571
}
564572
if (inputDimensions == ExpectedInputDimensionsNNV3 && networkVersion == NetworkVersionV3) {
565-
trackProperties[counterTrackProps + 6] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / 60000. : 1.;
573+
trackProperties[counterTrackProps + 6] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / Ft0cOccupancyNorm : 1.;
566574
if (trk.has_collision() && mults.size() > 0) {
567575
if (collsys == CollisionSystemType::kCollSyspp) {
568-
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / 1500.;
576+
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormPp;
569577
} else {
570-
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / 50.;
578+
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormAa;
571579
}
572580
} else {
573581
// asign Hadronic Rate at beginning of run if track does not belong to a collision
574582
if (collsys == CollisionSystemType::kCollSyspp) {
575-
trackProperties[counterTrackProps + 7] = hadronicRateBegin / 1500.;
583+
trackProperties[counterTrackProps + 7] = hadronicRateBegin / HadronicRateNormPp;
576584
} else {
577-
trackProperties[counterTrackProps + 7] = hadronicRateBegin / 50.;
585+
trackProperties[counterTrackProps + 7] = hadronicRateBegin / HadronicRateNormAa;
578586
}
579587
}
580588
}
581589

582590
if (inputDimensions == ExpectedInputDimensionsNNV4 && networkVersion == NetworkVersionV4) {
583-
trackProperties[counterTrackProps + 6] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / 60000. : 1.;
591+
trackProperties[counterTrackProps + 6] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / Ft0cOccupancyNorm : 1.;
584592
if (trk.has_collision() && mults.size() > 0) {
585593
if (collsys == CollisionSystemType::kCollSyspp) {
586-
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / 1500.;
594+
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormPp;
587595
} else {
588-
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / 50.;
596+
trackProperties[counterTrackProps + 7] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormAa;
589597
}
590598
} else {
591599
// asign Hadronic Rate at beginning of run if track does not belong to a collision
592600
if (collsys == CollisionSystemType::kCollSyspp) {
593-
trackProperties[counterTrackProps + 7] = hadronicRateBegin / 1500.;
601+
trackProperties[counterTrackProps + 7] = hadronicRateBegin / HadronicRateNormPp;
594602
} else {
595-
trackProperties[counterTrackProps + 7] = hadronicRateBegin / 50.;
603+
trackProperties[counterTrackProps + 7] = hadronicRateBegin / HadronicRateNormAa;
596604
}
597605
}
598-
trackProperties[counterTrackProps + 8] = std::fmod(std::fmod(trk.phi(), 2 * M_PI) + 2 * M_PI, M_PI / 9.0);
606+
trackProperties[counterTrackProps + 8] = std::fmod(std::fmod(trk.phi(), o2::constants::math::TwoPI) + o2::constants::math::TwoPI, o2::constants::math::TwoPI / NumberOfTpcSectors);
599607
}
600608
counterTrackProps += inputDimensions;
601609
}
@@ -616,8 +624,8 @@ class pidTPCModule
616624
trackProperties.clear();
617625

618626
const auto stopNetworkTotal = std::chrono::high_resolution_clock::now();
619-
LOG(debug) << "Neural Network for the TPC PID response correction: Time per track (eval ONNX): " << durationNetwork / (size * 9) << "ns ; Total time (eval ONNX): " << durationNetwork / 1000000000 << " s";
620-
LOG(debug) << "Neural Network for the TPC PID response correction: Time per track (eval + overhead): " << std::chrono::duration<float, std::ratio<1, 1000000000>>(stopNetworkTotal - startNetworkTotal).count() / (size * 9) << "ns ; Total time (eval + overhead): " << std::chrono::duration<float, std::ratio<1, 1000000000>>(stopNetworkTotal - startNetworkTotal).count() / 1000000000 << " s";
627+
LOG(debug) << "Neural Network for the TPC PID response correction: Time per track (eval ONNX): " << durationNetwork / (size * NParticleTypes) << "ns ; Total time (eval ONNX): " << durationNetwork / 1000000000 << " s";
628+
LOG(debug) << "Neural Network for the TPC PID response correction: Time per track (eval + overhead): " << std::chrono::duration<float, std::ratio<1, 1000000000>>(stopNetworkTotal - startNetworkTotal).count() / (size * NParticleTypes) << "ns ; Total time (eval + overhead): " << std::chrono::duration<float, std::ratio<1, 1000000000>>(stopNetworkTotal - startNetworkTotal).count() / 1000000000 << " s";
621629

622630
return networkPrediction;
623631
}

0 commit comments

Comments
 (0)