Skip to content

Commit b1935ad

Browse files
committed
DRY fill trackProperties
1 parent 909aab3 commit b1935ad

1 file changed

Lines changed: 14 additions & 43 deletions

File tree

Common/Tools/PID/pidTPCModule.h

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ class pidTPCModule
481481
IdxModPhi
482482
};
483483

484+
constexpr int OldestNNVersionWithFt0c{2};
485+
constexpr int OldestNNVersionWithHadronicRate{3};
486+
constexpr int OldestNNVersionWithModPhi{4};
487+
484488
std::vector<float> networkPrediction;
485489

486490
const auto startNetworkTotal = std::chrono::high_resolution_clock::now();
@@ -551,6 +555,8 @@ class pidTPCModule
551555
LOG(fatal) << "createNetworkPrediction(): networkVersion '" << networkVersion << "' and number of features " << inputDimensions << " are not compatible according to nnVersionsDictionary";
552556
}
553557

558+
const int hadronicRateNorm = collsys == CollisionSystemType::kCollSyspp ? HadronicRateNormPp : HadronicRateNormAa;
559+
554560
networkPrediction = std::vector<float>(predictionSize * NParticleTypes); // For each mass hypotheses
555561
const float nNclNormalization = response->GetNClNormalization();
556562
float durationNetwork = 0;
@@ -581,13 +587,6 @@ class pidTPCModule
581587

582588
// Filling a std::vector<float> to be evaluated by the network
583589
// Evaluation on single tracks brings huge overhead: Thus evaluation is done on one large vector
584-
585-
constexpr int ExpectedInputDimensionsNNV2 = 7;
586-
constexpr int ExpectedInputDimensionsNNV3 = 8;
587-
constexpr int ExpectedInputDimensionsNNV4 = 9;
588-
constexpr auto NetworkVersionV2 = "2";
589-
constexpr auto NetworkVersionV3 = "3";
590-
constexpr auto NetworkVersionV4 = "4";
591590
for (int j = 0; j < NParticleTypes; j++) { // Loop over particle number for which network correction is used
592591
for (auto const& trk : tracks) {
593592
if (!trk.hasTPC()) {
@@ -598,49 +597,21 @@ class pidTPCModule
598597
continue;
599598
}
600599
}
600+
const bool isGoodTrack = trk.has_collision() && mults.size() > 0;
601601
trackProperties[counterTrackProps + IdxTpcInnerParam] = trk.tpcInnerParam();
602602
trackProperties[counterTrackProps + IdxTgl] = trk.tgl();
603603
trackProperties[counterTrackProps + IdxSigned1Pt] = trk.signed1Pt();
604604
trackProperties[counterTrackProps + IdxMass] = o2::track::pid_constants::sMasses[j];
605-
trackProperties[counterTrackProps + IdxMultiplicity] = (trk.has_collision() && mults.size() > 0) ? mults[trk.collisionId()] / MultiplicityNorm : 1.;
605+
trackProperties[counterTrackProps + IdxMultiplicity] = isGoodTrack ? mults[trk.collisionId()] / MultiplicityNorm : 1.;
606606
trackProperties[counterTrackProps + IdxNClusters] = std::sqrt(nNclNormalization / trk.tpcNClsFound());
607-
if (inputDimensions == ExpectedInputDimensionsNNV2 && networkVersion == NetworkVersionV2) {
608-
trackProperties[counterTrackProps + IdxFt0cOcc] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / Ft0cOccupancyNorm : 1.;
607+
if (nnVersion >= OldestNNVersionWithFt0c) {
608+
trackProperties[counterTrackProps + IdxFt0cOcc] = isGoodTrack ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / Ft0cOccupancyNorm : 1.;
609609
}
610-
if (inputDimensions == ExpectedInputDimensionsNNV3 && networkVersion == NetworkVersionV3) {
611-
trackProperties[counterTrackProps + IdxFt0cOcc] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / Ft0cOccupancyNorm : 1.;
612-
if (trk.has_collision() && mults.size() > 0) {
613-
if (collsys == CollisionSystemType::kCollSyspp) {
614-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormPp;
615-
} else {
616-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormAa;
617-
}
618-
} else {
619-
// asign Hadronic Rate at beginning of run if track does not belong to a collision
620-
if (collsys == CollisionSystemType::kCollSyspp) {
621-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateBegin / HadronicRateNormPp;
622-
} else {
623-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateBegin / HadronicRateNormAa;
624-
}
625-
}
610+
if (nnVersion >= OldestNNVersionWithHadronicRate) {
611+
const float hadronicRate = isGoodTrack ? hadronicRateForCollision[trk.collisionId()] : hadronicRateBegin;
612+
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRate / hadronicRateNorm;
626613
}
627-
628-
if (inputDimensions == ExpectedInputDimensionsNNV4 && networkVersion == NetworkVersionV4) {
629-
trackProperties[counterTrackProps + IdxFt0cOcc] = (trk.has_collision() && mults.size() > 0) ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / Ft0cOccupancyNorm : 1.;
630-
if (trk.has_collision() && mults.size() > 0) {
631-
if (collsys == CollisionSystemType::kCollSyspp) {
632-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormPp;
633-
} else {
634-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateForCollision[trk.collisionId()] / HadronicRateNormAa;
635-
}
636-
} else {
637-
// asign Hadronic Rate at beginning of run if track does not belong to a collision
638-
if (collsys == CollisionSystemType::kCollSyspp) {
639-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateBegin / HadronicRateNormPp;
640-
} else {
641-
trackProperties[counterTrackProps + IdxHadronicRate] = hadronicRateBegin / HadronicRateNormAa;
642-
}
643-
}
614+
if (nnVersion >= OldestNNVersionWithModPhi) {
644615
trackProperties[counterTrackProps + IdxModPhi] = std::fmod(std::fmod(trk.phi(), o2::constants::math::TwoPI) + o2::constants::math::TwoPI, o2::constants::math::TwoPI / NumberOfTpcSectors);
645616
}
646617
counterTrackProps += inputDimensions;

0 commit comments

Comments
 (0)