Skip to content

Commit a81570f

Browse files
authored
[PWGCF] IdentifiedBf Fixes for MC particle processing (#8538)
1 parent a6771ec commit a81570f

File tree

2 files changed

+99
-95
lines changed

2 files changed

+99
-95
lines changed

PWGCF/TwoParticleCorrelations/TableProducer/identifiedBfFilter.cxx

Lines changed: 46 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
#include <cmath>
1414
#include <algorithm>
15+
#include <string>
16+
#include <vector>
1517

1618
#include "Framework/AnalysisTask.h"
1719
#include "Framework/AnalysisDataModel.h"
@@ -935,11 +937,9 @@ struct IdentifiedBfFilterTracks {
935937
template <typename TrackObject>
936938
inline MatchRecoGenSpecies IdentifyTrack(TrackObject const& track);
937939
template <typename TrackObject>
938-
MatchRecoGenSpecies trackIdentification(TrackObject const& track);
939-
template <typename TrackObject>
940940
int8_t AcceptTrack(TrackObject const& track);
941941
template <typename ParticleObject, typename MCCollisionObject>
942-
int8_t AcceptParticle(ParticleObject& particle, MCCollisionObject const&);
942+
int8_t AcceptParticle(ParticleObject& particle, MCCollisionObject const& mccollision);
943943
template <typename CollisionObjects, typename TrackObject>
944944
int8_t selectTrackAmbiguousCheck(CollisionObjects const& collisions, TrackObject const& track);
945945
template <typename ParticleObject>
@@ -1020,7 +1020,6 @@ struct IdentifiedBfFilterTracks {
10201020
void filterParticles(soa::Join<aod::McCollisions, aod::IdentifiedBfCFGenCollisionsInfo> const& gencollisions, aod::McParticles const& particles)
10211021
{
10221022
using namespace identifiedbffilter;
1023-
10241023
int acceptedparticles = 0;
10251024
int acceptedcollisions = 0;
10261025
if (!fullDerivedData) {
@@ -1049,38 +1048,9 @@ struct IdentifiedBfFilterTracks {
10491048
fillParticleHistosBeforeSelection(particle, mccollision, charge);
10501049

10511050
/* track selection */
1052-
/* TODO: at some point the pid has to be substituted by the identified species */
10531051
pid = AcceptParticle(particle, mccollision);
1054-
if (!(pid < 0)) {
1055-
/* the particle has been accepted */
1056-
/* let's identify the particle */
1057-
/* TODO: probably this needs to go to AcceptParticle */
1058-
MatchRecoGenSpecies sp = IdentifyParticle(particle);
1059-
if (sp != kWrongSpecies) {
1060-
if (sp != kIdBfCharged) {
1061-
/* fill the charged particle histograms */
1062-
fillParticleHistosAfterSelection(particle, mccollision, charge, kIdBfCharged);
1063-
/* update charged multiplicities */
1064-
if (pid % 2 == 0) {
1065-
partMultPos[kIdBfCharged]++;
1066-
}
1067-
if (pid % 2 == 1) {
1068-
partMultNeg[kIdBfCharged]++;
1069-
}
1070-
}
1071-
/* fill the species histograms */
1072-
fillParticleHistosAfterSelection(particle, mccollision, charge, sp);
1073-
/* update species multiplicities */
1074-
if (pid % 2 == 0) {
1075-
partMultPos[sp]++;
1076-
}
1077-
if (pid % 2 == 1) {
1078-
partMultNeg[sp]++;
1079-
}
1080-
acceptedparticles++;
1081-
} else {
1082-
pid = -1;
1083-
}
1052+
if (!(pid < 0)) { // if PID isn't negative
1053+
acceptedparticles++;
10841054
}
10851055
}
10861056
} else {
@@ -1161,7 +1131,7 @@ struct IdentifiedBfFilterTracks {
11611131
}
11621132
PROCESS_SWITCH(IdentifiedBfFilterTracks, filterRecoWithoutPIDAmbiguous, "Track filtering without PID information with ambiguous tracks check", false)
11631133

1164-
void filterDetectorLevelWithoutPID(soa::Join<aod::Collisions, aod::IdentifiedBfCFCollisionsInfo> const& collisions, IdBfFullTracksDetLevel const& tracks)
1134+
void filterDetectorLevelWithoutPID(soa::Join<aod::Collisions, aod::IdentifiedBfCFCollisionsInfo> const& collisions, IdBfFullTracksDetLevel const& tracks, aod::McParticles const&)
11651135
{
11661136
filterTracks(collisions, tracks);
11671137
}
@@ -1358,30 +1328,6 @@ inline MatchRecoGenSpecies IdentifiedBfFilterTracks::IdentifyTrack(TrackObject c
13581328
}
13591329
}
13601330

1361-
template <typename TrackObject>
1362-
MatchRecoGenSpecies IdentifiedBfFilterTracks::trackIdentification(TrackObject const& track)
1363-
{
1364-
using namespace identifiedbffilter;
1365-
MatchRecoGenSpecies sp = kWrongSpecies;
1366-
if (recoIdMethod == 0) {
1367-
sp = kIdBfCharged;
1368-
} else if (recoIdMethod == 1) {
1369-
1370-
if constexpr (framework::has_type_v<aod::pidtpc_tiny::TPCNSigmaStorePi, typename TrackObject::all_columns> || framework::has_type_v<aod::pidtpc::TPCNSigmaPi, typename TrackObject::all_columns>) {
1371-
sp = IdentifyTrack(track);
1372-
} else {
1373-
LOGF(fatal, "Track identification required but PID information not present");
1374-
}
1375-
} else if (recoIdMethod == 2) {
1376-
if constexpr (framework::has_type_v<aod::mctracklabel::McParticleId, typename TrackObject::all_columns>) {
1377-
sp = IdentifyParticle(track.template mcParticle_as<aod::McParticles>());
1378-
} else {
1379-
LOGF(fatal, "Track identification required from MC particle but MC information not present");
1380-
}
1381-
}
1382-
return sp;
1383-
}
1384-
13851331
/// \brief Accepts or not the passed track
13861332
/// \param track the track of interest
13871333
/// \return the internal track id, -1 if not accepted
@@ -1404,17 +1350,33 @@ inline int8_t IdentifiedBfFilterTracks::AcceptTrack(TrackObject const& track)
14041350
if (matchTrackType(track)) {
14051351
if (ptlow < track.pt() && track.pt() < ptup && etalow < track.eta() && track.eta() < etaup) {
14061352
fillTrackHistosAfterSelection(track, kIdBfCharged);
1407-
MatchRecoGenSpecies sp = trackIdentification(track);
1353+
MatchRecoGenSpecies sp = kWrongSpecies;
1354+
if (recoIdMethod == 0) {
1355+
sp = kIdBfCharged;
1356+
} else if (recoIdMethod == 1) {
1357+
1358+
if constexpr (framework::has_type_v<aod::pidtpc_tiny::TPCNSigmaStorePi, typename TrackObject::all_columns> || framework::has_type_v<aod::pidtpc::TPCNSigmaPi, typename TrackObject::all_columns>) {
1359+
sp = IdentifyTrack(track);
1360+
} else {
1361+
LOGF(fatal, "Track identification required but PID information not present");
1362+
}
1363+
} else if (recoIdMethod == 2) {
1364+
if constexpr (framework::has_type_v<aod::mctracklabel::McParticleId, typename TrackObject::all_columns>) {
1365+
sp = IdentifyParticle(track.template mcParticle_as<aod::McParticles>());
1366+
} else {
1367+
LOGF(fatal, "Track identification required from MC particle but MC information not present");
1368+
}
1369+
}
14081370
if (sp == kWrongSpecies) {
14091371
return -1;
14101372
}
14111373
if (!(sp < 0)) {
14121374
fillTrackHistosAfterSelection(track, sp); //<Fill accepted track histo with PID
1413-
if (track.sign() > 0) {
1375+
if (track.sign() > 0) { // if positive
14141376
trkMultPos[sp]++; //<< Update Particle Multiplicity
14151377
return speciesChargeValue1[sp];
14161378
}
1417-
if (track.sign() < 0) {
1379+
if (track.sign() < 0) { // if negative
14181380
trkMultNeg[sp]++; //<< Update Particle Multiplicity
14191381
return speciesChargeValue1[sp] + 1;
14201382
}
@@ -1428,7 +1390,7 @@ inline int8_t IdentifiedBfFilterTracks::AcceptTrack(TrackObject const& track)
14281390
/// \param track the particle of interest
14291391
/// \return `true` if the particle is accepted, `false` otherwise
14301392
template <typename ParticleObject, typename MCCollisionObject>
1431-
inline int8_t IdentifiedBfFilterTracks::AcceptParticle(ParticleObject& particle, MCCollisionObject const&)
1393+
inline int8_t IdentifiedBfFilterTracks::AcceptParticle(ParticleObject& particle, MCCollisionObject const& mccollision)
14321394
{
14331395
/* overall momentum cut */
14341396
if (!(overallminp < particle.p())) {
@@ -1444,6 +1406,26 @@ inline int8_t IdentifiedBfFilterTracks::AcceptParticle(ParticleObject& particle,
14441406

14451407
if (ptlow < particle.pt() && particle.pt() < ptup && etalow < particle.eta() && particle.eta() < etaup) {
14461408
MatchRecoGenSpecies sp = IdentifyParticle(particle);
1409+
if (sp != kWrongSpecies) {
1410+
if (sp != kIdBfCharged) {
1411+
/* fill the charged particle histograms */
1412+
fillParticleHistosAfterSelection(particle, mccollision, charge, kIdBfCharged);
1413+
/* update charged multiplicities */
1414+
if (charge == 1) {
1415+
partMultPos[kIdBfCharged]++;
1416+
} else if (charge == -1) {
1417+
partMultNeg[kIdBfCharged]++;
1418+
}
1419+
}
1420+
/* fill the species histograms */
1421+
fillParticleHistosAfterSelection(particle, mccollision, charge, sp);
1422+
/* update species multiplicities */
1423+
if (charge == 1) {
1424+
partMultPos[sp]++;
1425+
} else if (charge == -1) {
1426+
partMultNeg[sp]++;
1427+
}
1428+
}
14471429
if (charge == 1) {
14481430
return speciesChargeValue1[sp];
14491431

PWGCF/TwoParticleCorrelations/TableProducer/identifiedBfFilter.h

Lines changed: 53 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ namespace aod
3434
{
3535
using CollisionsEvSelCent = soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, aod::CentNTPVs>;
3636
using CollisionEvSelCent = soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs, aod::CentNTPVs>::iterator;
37-
using CollisionsEvSelRun2Cent = soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::CentRun2V0Ms, aod::CentRun2CL0s, aod::CentRun2CL1s>;
38-
using CollisionEvSelRun2Cent = soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::CentRun2V0Ms, aod::CentRun2CL0s, aod::CentRun2CL1s>::iterator;
37+
using CollisionsEvSelRun2Cent = soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::CentRun2V0Ms>;
38+
using CollisionEvSelRun2Cent = soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::CentRun2V0Ms>::iterator;
3939
using CollisionsEvSel = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
4040
using CollisionEvSel = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>::iterator;
4141
using TrackData = soa::Join<aod::Tracks, aod::TracksCov, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection>::iterator;
@@ -523,38 +523,60 @@ inline float extractMultiplicity(CollisionObject const& collision, CentMultEstim
523523
//////////////////////////////////////////////////////////////////////////////////
524524
/// \brief Centrality/multiplicity percentile
525525
template <typename CollisionObject>
526-
requires(o2::aod::HasRun2Centrality<CollisionObject>)
527526
float getCentMultPercentile(CollisionObject collision)
528527
{
529-
switch (fCentMultEstimator) {
530-
case kV0M:
531-
return collision.centRun2V0M();
532-
case kCL0:
533-
return collision.centRun2CL0();
534-
case kCL1:
535-
return collision.centRun2CL1();
536-
default:
537-
return 105.0;
538-
}
539-
}
528+
if constexpr (framework::has_type_v<aod::cent::CentRun2V0M, typename CollisionObject::all_columns> ||
529+
framework::has_type_v<aod::cent::CentRun2CL0, typename CollisionObject::all_columns> ||
530+
framework::has_type_v<aod::cent::CentRun2CL1, typename CollisionObject::all_columns>) {
531+
switch (fCentMultEstimator) {
532+
case kV0M:
533+
return collision.centRun2V0M();
534+
break;
535+
case kCL0:
536+
if constexpr (framework::has_type_v<aod::cent::CentRun2CL0, typename CollisionObject::all_columns>) {
537+
return collision.centRun2CL0();
538+
} else {
539+
return 105.0;
540+
}
541+
break;
540542

541-
template <typename CollisionObject>
542-
requires(o2::aod::HasCentrality<CollisionObject>)
543-
float getCentMultPercentile(CollisionObject collision)
544-
{
545-
switch (fCentMultEstimator) {
546-
case kFV0A:
547-
return collision.centFV0A();
548-
case kFT0M:
549-
return collision.centFT0M();
550-
case kFT0A:
551-
return collision.centFT0A();
552-
case kFT0C:
553-
return collision.centFT0C();
554-
case kNTPV:
555-
return collision.centNTPV();
556-
default:
557-
return 105.0;
543+
case kCL1:
544+
if constexpr (framework::has_type_v<aod::cent::CentRun2CL1, typename CollisionObject::all_columns>) {
545+
return collision.centRun2CL1();
546+
} else {
547+
return 105.0;
548+
}
549+
break;
550+
default:
551+
return 105.0;
552+
break;
553+
}
554+
}
555+
if constexpr (framework::has_type_v<aod::cent::CentFV0A, typename CollisionObject::all_columns> ||
556+
framework::has_type_v<aod::cent::CentFT0M, typename CollisionObject::all_columns> ||
557+
framework::has_type_v<aod::cent::CentFT0A, typename CollisionObject::all_columns> ||
558+
framework::has_type_v<aod::cent::CentFT0C, typename CollisionObject::all_columns> ||
559+
framework::has_type_v<aod::cent::CentNTPV, typename CollisionObject::all_columns>) {
560+
switch (fCentMultEstimator) {
561+
case kFV0A:
562+
return collision.centFV0A();
563+
break;
564+
case kFT0M:
565+
return collision.centFT0M();
566+
break;
567+
case kFT0A:
568+
return collision.centFT0A();
569+
break;
570+
case kFT0C:
571+
return collision.centFT0C();
572+
break;
573+
case kNTPV:
574+
return collision.centNTPV();
575+
break;
576+
default:
577+
return 105.0;
578+
break;
579+
}
558580
}
559581
}
560582

0 commit comments

Comments
 (0)