Skip to content

Commit da7bb0b

Browse files
committed
Fix compilation warnings
1 parent 038f971 commit da7bb0b

4 files changed

Lines changed: 61 additions & 34 deletions

File tree

Common/Core/PID/TPCPIDResponse.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,17 @@ class Response
7575
template <typename CollisionType, typename TrackType>
7676
float GetExpectedSigma(const CollisionType& collision, const TrackType& trk, const o2::track::PID::ID id) const;
7777
/// Gets the expected resolution of the track with multTPC explicitly provided
78-
template <typename CollisionType, typename TrackType>
79-
float GetExpectedSigma(const CollisionType& collision, const long multTPC, const TrackType& trk, const o2::track::PID::ID id) const;
78+
template <typename TrackType>
79+
float GetExpectedSigmaAtMultiplicity(const long multTPC, const TrackType& trk, const o2::track::PID::ID id) const;
8080
/// Gets the number of sigmas with respect the expected value
8181
template <typename CollisionType, typename TrackType>
8282
float GetNumberOfSigma(const CollisionType& collision, const TrackType& trk, const o2::track::PID::ID id) const;
8383
// Number of sigmas with respect to expected for MC, defining a tune-on-data signal value
8484
template <typename CollisionType, typename TrackType>
8585
float GetNumberOfSigmaMCTuned(const CollisionType& collision, const TrackType& trk, const o2::track::PID::ID id, float mcTunedTPCSignal) const;
8686
// Number of sigmas with respect to expected for MC, defining a tune-on-data signal value, explicit multTPC
87-
template <typename CollisionType, typename TrackType>
88-
float GetNumberOfSigmaMCTuned(const CollisionType& collision, const long multTPC, const TrackType& trk, const o2::track::PID::ID id, float mcTunedTPCSignal) const;
87+
template <typename TrackType>
88+
float GetNumberOfSigmaMCTunedAtMultiplicity(const long multTPC, const TrackType& trk, const o2::track::PID::ID id, float mcTunedTPCSignal) const;
8989
/// Gets the deviation to the expected signal
9090
template <typename TrackType>
9191
float GetSignalDelta(const TrackType& trk, const o2::track::PID::ID id) const;
@@ -124,12 +124,12 @@ template <typename CollisionType, typename TrackType>
124124
inline float Response::GetExpectedSigma(const CollisionType& collision, const TrackType& track, const o2::track::PID::ID id) const
125125
{
126126
// use multTPC (legacy behaviour) if multTPC not provided
127-
return Response::GetExpectedSigma(collision, collision.multTPC(), track, id);
127+
return Response::GetExpectedSigmaAtMultiplicity(collision.multTPC(), track, id);
128128
}
129129

130130
/// Gets the expected resolution of the measurement
131-
template <typename CollisionType, typename TrackType>
132-
inline float Response::GetExpectedSigma(const CollisionType& collision, const long multTPC, const TrackType& track, const o2::track::PID::ID id) const
131+
template <typename TrackType>
132+
inline float Response::GetExpectedSigmaAtMultiplicity(const long multTPC, const TrackType& track, const o2::track::PID::ID id) const
133133
{
134134
if (!track.hasTPC()) {
135135
return -999.f;
@@ -174,13 +174,13 @@ inline float Response::GetNumberOfSigma(const CollisionType& collision, const Tr
174174
template <typename CollisionType, typename TrackType>
175175
inline float Response::GetNumberOfSigmaMCTuned(const CollisionType& collision, const TrackType& trk, const o2::track::PID::ID id, float mcTunedTPCSignal) const
176176
{
177-
return Response::GetNumberOfSigmaMCTuned(collision, collision.multTPC(), trk, id, mcTunedTPCSignal);
177+
return Response::GetNumberOfSigmaMCTunedAtMultiplicity(collision.multTPC(), trk, id, mcTunedTPCSignal);
178178
}
179179

180-
template <typename CollisionType, typename TrackType>
181-
inline float Response::GetNumberOfSigmaMCTuned(const CollisionType& collision, const long multTPC, const TrackType& trk, const o2::track::PID::ID id, float mcTunedTPCSignal) const
180+
template <typename TrackType>
181+
inline float Response::GetNumberOfSigmaMCTunedAtMultiplicity(const long multTPC, const TrackType& trk, const o2::track::PID::ID id, float mcTunedTPCSignal) const
182182
{
183-
if (GetExpectedSigma(collision, multTPC, trk, id) < 0.) {
183+
if (GetExpectedSigmaAtMultiplicity(multTPC, trk, id) < 0.) {
184184
return -999.f;
185185
}
186186
if (GetExpectedSignal(trk, id) < 0.) {
@@ -189,7 +189,7 @@ inline float Response::GetNumberOfSigmaMCTuned(const CollisionType& collision, c
189189
if (!trk.hasTPC()) {
190190
return -999.f;
191191
}
192-
return ((mcTunedTPCSignal - GetExpectedSignal(trk, id)) / GetExpectedSigma(collision, multTPC, trk, id));
192+
return ((mcTunedTPCSignal - GetExpectedSignal(trk, id)) / GetExpectedSigmaAtMultiplicity(multTPC, trk, id));
193193
}
194194

195195
/// Gets the deviation between the actual signal and the expected signal

Common/TableProducer/PID/pidTPC.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ struct tpcPid {
457457
LOGF(fatal, "Network output-dimensions incompatible!");
458458
}
459459
} else {
460-
nSigma = response->GetNumberOfSigmaMCTuned(collisions.iteratorAt(trk.collisionId()), 1, trk, pid, tpcSignal);
460+
nSigma = response->GetNumberOfSigmaMCTuned(collisions.iteratorAt(trk.collisionId()), trk, pid, tpcSignal);
461461
}
462462
if (flagFull)
463463
tableFull(expSigma, nSigma);

Common/TableProducer/PID/pidTPCModule.h

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -465,8 +465,8 @@ class pidTPCModule
465465
}
466466

467467
//__________________________________________________
468-
template <typename C, typename T, typename NSF, typename NST>
469-
void makePidTables(const int flagFull, NSF& tableFull, const int flagTiny, NST& tableTiny, const o2::track::PID::ID pid, const float tpcSignal, const T& trk, const C& collisions, const long multTPC, const std::vector<float>& network_prediction, const int& count_tracks, const int& tracksForNet_size)
468+
template <typename T, typename NSF, typename NST>
469+
void makePidTables(const int flagFull, NSF& tableFull, const int flagTiny, NST& tableTiny, const o2::track::PID::ID pid, const float tpcSignal, const T& trk, const long multTPC, const std::vector<float>& network_prediction, const int& count_tracks, const int& tracksForNet_size)
470470
{
471471
if (flagFull != 1 && flagTiny != 1) {
472472
return;
@@ -488,7 +488,7 @@ class pidTPCModule
488488
}
489489
}
490490
auto expSignal = response->GetExpectedSignal(trk, pid);
491-
auto expSigma = trk.has_collision() ? response->GetExpectedSigma(collisions.iteratorAt(trk.collisionId()), multTPC, trk, pid) : 0.07 * expSignal; // use default sigma value of 7% if no collision information to estimate resolution
491+
auto expSigma = trk.has_collision() ? response->GetExpectedSigmaAtMultiplicity(multTPC, trk, pid) : 0.07 * expSignal; // use default sigma value of 7% if no collision information to estimate resolution
492492
if (expSignal < 0. || expSigma < 0.) { // skip if expected signal invalid
493493
if (flagFull)
494494
tableFull(-999.f, -999.f);
@@ -520,7 +520,7 @@ class pidTPCModule
520520
LOGF(fatal, "Network output-dimensions incompatible!");
521521
}
522522
} else {
523-
nSigma = response->GetNumberOfSigmaMCTuned(collisions.iteratorAt(trk.collisionId()), multTPC, trk, pid, tpcSignal);
523+
nSigma = response->GetNumberOfSigmaMCTunedAtMultiplicity(multTPC, trk, pid, tpcSignal);
524524
}
525525
if (flagFull)
526526
tableFull(expSigma, nSigma);
@@ -529,10 +529,14 @@ class pidTPCModule
529529
};
530530

531531
//__________________________________________________
532-
template <typename TCCDB, typename TCCDBApi, typename TBCs, typename TCollisions, typename TTracks, typename TMCParticles, typename TProducts>
533-
void process(TCCDB& ccdb, TCCDBApi& ccdbApi, TBCs const& bcs, TCollisions const& cols, TTracks const& tracks, TMCParticles const& mcParticles, TProducts& products)
532+
template <typename TCCDB, typename TCCDBApi, typename TBCs, typename TCollisions, typename TTracks, typename TTracksQA, typename TProducts>
533+
void process(TCCDB& ccdb, TCCDBApi& ccdbApi, TBCs const& bcs, TCollisions const& cols, TTracks const& tracks, TTracksQA const& tracksQA, TProducts& products)
534534
{
535-
if constexpr (soa::is_table<TMCParticles>) {
535+
if(tracks.size()==0){
536+
return; // empty protection
537+
}
538+
auto trackiterator = tracks.begin();
539+
if constexpr (requires { trackiterator.mcParticleId(); }) {
536540
gRandom->SetSeed(0); // Ensure unique seed from UUID for each process call
537541
}
538542

@@ -594,27 +598,39 @@ class pidTPCModule
594598

595599
uint64_t count_tracks = 0;
596600

601+
//_______________________________________
602+
// process tracksQA in case present
603+
std::vector<int64_t> indexTrack2TrackQA;
604+
if constexpr (soa::is_table<TTracksQA>) {
605+
for (const auto& trackQA : tracksQA) {
606+
indexTrack2TrackQA[trackQA.trackId()] = trackQA.globalIndex();
607+
}
608+
}
609+
//_______________________________________
610+
597611
for (auto const& trk : tracks) {
598612
// get the TPC signal to be used in the PID
599613
float tpcSignalToEvaluatePID = trk.tpcSignal();
600614

615+
int multTPC = 0;
616+
if(trk.has_collision()){
617+
multTPC = pidmults[trk.collisionId()];
618+
}
619+
601620
// if corrected dE/dx is requested, correct it here on the spot and use that
602621
if (pidTPCopts.useCorrecteddEdx) {
603622
double hadronicRate;
604-
int multTPC;
605623
int occupancy;
606624
if (trk.has_collision()) {
607625
auto collision = cols.iteratorAt(trk.collisionId());
608626
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
609627
const int runnumber = bc.runNumber();
610628
hadronicRate = mRateFetcher.fetch(ccdb.service, bc.timestamp(), runnumber, "ZNC hadronic") * 1.e-3; // kHz
611-
multTPC = pidmults[trk.collisionId()];
612629
occupancy = collision.trackOccupancyInTimeRange();
613630
} else {
614631
auto bc = bcs.begin();
615632
const int runnumber = bc.runNumber();
616633
hadronicRate = mRateFetcher.fetch(ccdb.service, bc.timestamp(), runnumber, "ZNC hadronic") * 1.e-3; // kHz
617-
multTPC = 0;
618634
occupancy = 0;
619635
}
620636

@@ -659,13 +675,23 @@ class pidTPCModule
659675
// change the signal used for PID
660676
tpcSignalToEvaluatePID = fTPCSignal / fTPCSignalN_CR1;
661677

678+
//_________________________________________________________
679+
// bypass TPC signal in case TracksQA information present
680+
if constexpr (soa::is_table<TTracksQA>) {
681+
tpcSignalToEvaluatePID = -999.f;
682+
if(indexTrack2TrackQA[trk.globalIndex()]!=-1){
683+
auto trackQA = tracksQA.rawIteratorAt(indexTrack2TrackQA[trk.globalIndex()]);
684+
tpcSignalToEvaluatePID = trackQA.tpcdEdxNorm();
685+
}
686+
}
687+
//_________________________________________________________
688+
662689
if (pidTPCopts.savedEdxsCorrected) {
663690
// populated cursor if requested or autodetected
664691
products.dEdxCorrected(tpcSignalToEvaluatePID);
665692
}
666693
}
667694

668-
auto collision = cols.rawIteratorAt(trk.collisionId());
669695
const auto& bc = trk.has_collision() ? cols.rawIteratorAt(trk.collisionId()).template bc_as<aod::BCsWithTimestamps>() : bcs.begin();
670696
if (useCCDBParam && pidTPCopts.ccdbTimestamp.value == 0 && !ccdb->isCachedObjectValid(pidTPCopts.ccdbPath.value, bc.timestamp())) { // Updating parametrisation only if the initial timestamp is 0
671697
if (pidTPCopts.recoPass.value == "") {
@@ -688,7 +714,7 @@ class pidTPCModule
688714
}
689715

690716
// if this is a MC process function, go for MC tune on data processing
691-
if constexpr (soa::is_table<TMCParticles>) {
717+
if constexpr (requires { trk.mcParticleId(); }) {
692718
// Perform TuneOnData sampling for MC dE/dx
693719
float mcTunedTPCSignal = 0.;
694720
if (!trk.hasTPC()) {
@@ -702,7 +728,7 @@ class pidTPCModule
702728
int pid = getPIDIndex(trk.mcParticle().pdgCode());
703729

704730
auto expSignal = response->GetExpectedSignal(trk, pid);
705-
auto expSigma = response->GetExpectedSigma(cols.iteratorAt(trk.collisionId()), pidmults[trk.collisionId()], trk, pid);
731+
auto expSigma = response->GetExpectedSigmaAtMultiplicity(multTPC, trk, pid);
706732
if (expSignal < 0. || expSigma < 0.) { // if expectation invalid then give undefined signal
707733
mcTunedTPCSignal = -999.f;
708734
}
@@ -725,12 +751,8 @@ class pidTPCModule
725751
products.tableTuneOnData(mcTunedTPCSignal);
726752
}
727753

728-
int multTPCtoUse = 1;
729-
if (trk.has_collision()) {
730-
multTPCtoUse = pidmults[trk.collisionId()];
731-
}
732-
auto makePidTablesDefault = [&trk, &tpcSignalToEvaluatePID, &cols, &multTPCtoUse, &network_prediction, &count_tracks, &tracksForNet_size, this](const int flagFull, auto& tableFull, const int flagTiny, auto& tableTiny, const o2::track::PID::ID pid) {
733-
makePidTables(flagFull, tableFull, flagTiny, tableTiny, pid, tpcSignalToEvaluatePID, trk, cols, multTPCtoUse, network_prediction, count_tracks, tracksForNet_size);
754+
auto makePidTablesDefault = [&trk, &tpcSignalToEvaluatePID, &multTPC, &network_prediction, &count_tracks, &tracksForNet_size, this](const int flagFull, auto& tableFull, const int flagTiny, auto& tableTiny, const o2::track::PID::ID pid) {
755+
makePidTables(flagFull, tableFull, flagTiny, tableTiny, pid, tpcSignalToEvaluatePID, trk, multTPC, network_prediction, count_tracks, tracksForNet_size);
734756
};
735757

736758
makePidTablesDefault(pidTPCopts.pidFullEl, products.tablePIDFullEl, pidTPCopts.pidTinyEl, products.tablePIDTinyEl, o2::track::PID::Electron);

Common/TableProducer/PID/pidTPCService.cxx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,15 @@ struct pidTpcService {
8383
{
8484
pidTPC.process(ccdb, ccdbApi, bcs, collisions, tracks, static_cast<TObject*>(nullptr), products);
8585
}
86+
void processTracksWithTracksQA(soa::Join<aod::Collisions, aod::EvSels> const& collisions, soa::Join<aod::Tracks, aod::TracksExtra> const& tracks, aod::BCsWithTimestamps const& bcs, aod::TracksQA const& tracksQA)
87+
{
88+
pidTPC.process(ccdb, ccdbApi, bcs, collisions, tracks, tracksQA, products);
89+
}
8690

87-
void processTracksMC(soa::Join<aod::Collisions, aod::EvSels> const& collisions, soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels> const& tracks, aod::BCsWithTimestamps const& bcs, aod::McParticles const& mcParticles)
91+
92+
void processTracksMC(soa::Join<aod::Collisions, aod::EvSels> const& collisions, soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels> const& tracks, aod::BCsWithTimestamps const& bcs, aod::McParticles const&)
8893
{
89-
pidTPC.process(ccdb, ccdbApi, bcs, collisions, tracks, mcParticles, products);
94+
pidTPC.process(ccdb, ccdbApi, bcs, collisions, tracks, static_cast<TObject*>(nullptr), products);
9095
}
9196

9297
void processTracksIU(soa::Join<aod::Collisions, aod::EvSels> const& collisions, soa::Join<aod::TracksIU, aod::TracksCovIU, aod::TracksExtra> const& tracks, aod::BCsWithTimestamps const& bcs)

0 commit comments

Comments
 (0)