Skip to content

Commit 0e182ae

Browse files
committed
factorize processWithdEdxTrQA[,WithCorrecteddEdx] to runWithdEdxTrQA<>
1 parent eddf77c commit 0e182ae

File tree

1 file changed

+24
-128
lines changed

1 file changed

+24
-128
lines changed

DPG/Tasks/TPC/tpcSkimsTableCreator.cxx

Lines changed: 24 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,10 @@ struct TreeWriterTpcV0 {
484484
Preslice<Trks> perCollisionTracks = aod::track::collisionId;
485485
Preslice<V0sWithID> perCollisionV0s = aod::v0data::collisionId;
486486
Preslice<CascsWithID> perCollisionCascs = aod::cascdata::collisionId;
487-
void processWithdEdxTrQA(Colls const& collisions, Trks const& myTracks, V0sWithID const& myV0s, CascsWithID const& myCascs, aod::BCsWithTimestamps const&, aod::TracksQAVersion const& tracksQA)
487+
Preslice<TrksWithDEdxCorrection> perCollisionTracksWithNewDEdx = aod::track::collisionId;
488+
489+
template<bool IsCorrecteddEdx, typename TrksType>
490+
void runWithdEdxTrQA(Colls const& collisions, TrksType const& myTracks, V0sWithID const& myV0s, CascsWithID const& myCascs, aod::TracksQAVersion const& tracksQA, Preslice<TrksType> const& perCollisionTracksType)
488491
{
489492
std::vector<int64_t> labelTrack2TrackQA;
490493
labelTrack2TrackQA.clear();
@@ -495,7 +498,7 @@ struct TreeWriterTpcV0 {
495498
labelTrack2TrackQA[trackId] = trackQAIndex;
496499
}
497500
for (const auto& collision : collisions) {
498-
auto tracks = myTracks.sliceBy(perCollisionTracks, collision.globalIndex());
501+
auto tracks = myTracks.sliceBy(perCollisionTracksType, collision.globalIndex());
499502
auto v0s = myV0s.sliceBy(perCollisionV0s, collision.globalIndex());
500503
auto cascs = myCascs.sliceBy(perCollisionCascs, collision.globalIndex());
501504
/// Check event slection
@@ -508,8 +511,8 @@ struct TreeWriterTpcV0 {
508511
rowTPCTreeWithTrkQA.reserve(tracks.size());
509512
/// Loop over v0 candidates
510513
for (const auto& v0 : v0s) {
511-
auto posTrack = v0.posTrack_as<Trks>();
512-
auto negTrack = v0.negTrack_as<Trks>();
514+
auto posTrack = v0.posTrack_as<TrksType>();
515+
auto negTrack = v0.negTrack_as<TrksType>();
513516
if (v0.v0addid() == -1) {
514517
continue;
515518
}
@@ -535,48 +538,48 @@ struct TreeWriterTpcV0 {
535538
// gamma
536539
if (static_cast<bool>(posTrack.pidbit() & (1 << 0)) && static_cast<bool>(negTrack.pidbit() & (1 << 0))) {
537540
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
538-
fillSkimmedV0TableWithdEdxTrQA(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaEl(), posTrack.tofNSigmaEl(), posTrack.tpcExpSignalEl(posTrack.tpcSignal()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
541+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaEl(), posTrack.tofNSigmaEl(), posTrack.tpcExpSignalEl(tpcSignalGeneric<IsCorrecteddEdx>(posTrack)), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
539542
}
540543
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
541-
fillSkimmedV0TableWithdEdxTrQA(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaEl(), negTrack.tofNSigmaEl(), negTrack.tpcExpSignalEl(negTrack.tpcSignal()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
544+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaEl(), negTrack.tofNSigmaEl(), negTrack.tpcExpSignalEl(tpcSignalGeneric<IsCorrecteddEdx>(negTrack)), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
542545
}
543546
}
544547
// Ks0
545548
if (static_cast<bool>(posTrack.pidbit() & (1 << 1)) && static_cast<bool>(negTrack.pidbit() & (1 << 1))) {
546549
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
547-
fillSkimmedV0TableWithdEdxTrQA(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPi(), posTrack.tofNSigmaPi(), posTrack.tpcExpSignalPi(posTrack.tpcSignal()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
550+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPi(), posTrack.tofNSigmaPi(), posTrack.tpcExpSignalPi(tpcSignalGeneric<IsCorrecteddEdx>(posTrack)), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
548551
}
549552
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
550-
fillSkimmedV0TableWithdEdxTrQA(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPi(), negTrack.tofNSigmaPi(), negTrack.tpcExpSignalPi(negTrack.tpcSignal()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
553+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPi(), negTrack.tofNSigmaPi(), negTrack.tpcExpSignalPi(tpcSignalGeneric<IsCorrecteddEdx>(negTrack)), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
551554
}
552555
}
553556
// Lambda
554557
if (static_cast<bool>(posTrack.pidbit() & (1 << 2)) && static_cast<bool>(negTrack.pidbit() & (1 << 2))) {
555558
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
556559
if (std::abs(posTrack.tofNSigmaPr()) <= nSigmaTOFdautrack) {
557-
fillSkimmedV0TableWithdEdxTrQA(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPr(), posTrack.tofNSigmaPr(), posTrack.tpcExpSignalPr(posTrack.tpcSignal()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
560+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPr(), posTrack.tofNSigmaPr(), posTrack.tpcExpSignalPr(tpcSignalGeneric<IsCorrecteddEdx>(posTrack)), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
558561
}
559562
}
560563
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
561-
fillSkimmedV0TableWithdEdxTrQA(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPi(), negTrack.tofNSigmaPi(), negTrack.tpcExpSignalPi(negTrack.tpcSignal()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
564+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPi(), negTrack.tofNSigmaPi(), negTrack.tpcExpSignalPi(tpcSignalGeneric<IsCorrecteddEdx>(negTrack)), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
562565
}
563566
}
564567
// Antilambda
565568
if (static_cast<bool>(posTrack.pidbit() & (1 << 3)) && static_cast<bool>(negTrack.pidbit() & (1 << 3))) {
566569
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
567-
fillSkimmedV0TableWithdEdxTrQA(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPi(), posTrack.tofNSigmaPi(), posTrack.tpcExpSignalPi(posTrack.tpcSignal()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
570+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPi(), posTrack.tofNSigmaPi(), posTrack.tpcExpSignalPi(tpcSignalGeneric<IsCorrecteddEdx>(posTrack)), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
568571
}
569572
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
570573
if (std::abs(negTrack.tofNSigmaPr()) <= nSigmaTOFdautrack) {
571-
fillSkimmedV0TableWithdEdxTrQA(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPr(), negTrack.tofNSigmaPr(), negTrack.tpcExpSignalPr(negTrack.tpcSignal()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
574+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPr(), negTrack.tofNSigmaPr(), negTrack.tpcExpSignalPr(tpcSignalGeneric<IsCorrecteddEdx>(negTrack)), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
572575
}
573576
}
574577
}
575578
}
576579

577580
/// Loop over cascade candidates
578581
for (const auto& casc : cascs) {
579-
auto bachTrack = casc.bachelor_as<Trks>();
582+
auto bachTrack = casc.bachelor_as<TrksType>();
580583
if (casc.cascaddid() == kUndef) {
581584
continue;
582585
}
@@ -594,130 +597,23 @@ struct TreeWriterTpcV0 {
594597
// Omega and antiomega
595598
if (static_cast<bool>(bachTrack.pidbit() & (1 << kOmega)) || static_cast<bool>(bachTrack.pidbit() & (1 << kAntiOmega))) {
596599
if (downsampleTsalisCharged(bachTrack.pt(), downsamplingTsalisKaons, MassKaon, maxPt4dwnsmplTsalisKaons)) {
597-
fillSkimmedV0TableWithdEdxTrQA(casc, bachTrack, bachTrackQA, existBachTrkQA, collision, bachTrack.tpcNSigmaKa(), bachTrack.tofNSigmaKa(), bachTrack.tpcExpSignalKa(bachTrack.tpcSignal()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
600+
fillSkimmedV0TableWithdEdxTrQA<IsCorrecteddEdx>(casc, bachTrack, bachTrackQA, existBachTrkQA, collision, bachTrack.tpcNSigmaKa(), bachTrack.tofNSigmaKa(), bachTrack.tpcExpSignalKa(tpcSignalGeneric<IsCorrecteddEdx>(bachTrack)), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
598601
}
599602
}
600603
}
601604
}
605+
}
606+
607+
608+
void processWithdEdxTrQA(Colls const& collisions, Trks const& myTracks, V0sWithID const& myV0s, CascsWithID const& myCascs, aod::BCsWithTimestamps const&, aod::TracksQAVersion const& tracksQA)
609+
{
610+
runWithdEdxTrQA<false>(collisions, myTracks, myV0s, myCascs, tracksQA, perCollisionTracks);
602611
} /// process with dEdx from TrackQA
603612
PROCESS_SWITCH(TreeWriterTpcV0, processWithdEdxTrQA, "Standard V0 Samples with dEdx from Track QA for PID", false);
604613

605-
Preslice<TrksWithDEdxCorrection> perCollisionTracksWithNewDEdx = aod::track::collisionId;
606614
void processWithdEdxTrQAWithCorrecteddEdx(Colls const& collisions, TrksWithDEdxCorrection const& myTracks, V0sWithID const& myV0s, CascsWithID const& myCascs, aod::BCsWithTimestamps const&, aod::TracksQAVersion const& tracksQA)
607615
{
608-
std::vector<int64_t> labelTrack2TrackQA;
609-
labelTrack2TrackQA.clear();
610-
labelTrack2TrackQA.resize(myTracks.size(), -1);
611-
for (const auto& trackQA : tracksQA) {
612-
int64_t trackId = trackQA.trackId();
613-
int64_t trackQAIndex = trackQA.globalIndex();
614-
labelTrack2TrackQA[trackId] = trackQAIndex;
615-
}
616-
for (const auto& collision : collisions) {
617-
auto tracks = myTracks.sliceBy(perCollisionTracksWithNewDEdx, collision.globalIndex());
618-
auto v0s = myV0s.sliceBy(perCollisionV0s, collision.globalIndex());
619-
auto cascs = myCascs.sliceBy(perCollisionCascs, collision.globalIndex());
620-
/// Check event slection
621-
if (!isEventSelected(collision, tracks)) {
622-
continue;
623-
}
624-
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
625-
const int runnumber = bc.runNumber();
626-
float hadronicRate = mRateFetcher.fetch(ccdb.service, bc.timestamp(), runnumber, irSource) * 1.e-3;
627-
rowTPCTreeWithTrkQA.reserve(tracks.size());
628-
/// Loop over v0 candidates
629-
for (const auto& v0 : v0s) {
630-
auto posTrack = v0.posTrack_as<TrksWithDEdxCorrection>();
631-
auto negTrack = v0.negTrack_as<TrksWithDEdxCorrection>();
632-
if (v0.v0addid() == -1) {
633-
continue;
634-
}
635-
aod::TracksQA posTrackQA;
636-
aod::TracksQA negTrackQA;
637-
bool existPosTrkQA;
638-
bool existNegTrkQA;
639-
if (labelTrack2TrackQA[posTrack.globalIndex()] != -1) {
640-
posTrackQA = tracksQA.iteratorAt(labelTrack2TrackQA[posTrack.globalIndex()]);
641-
existPosTrkQA = true;
642-
} else {
643-
posTrackQA = tracksQA.iteratorAt(0);
644-
existPosTrkQA = false;
645-
}
646-
if (labelTrack2TrackQA[negTrack.globalIndex()] != -1) {
647-
negTrackQA = tracksQA.iteratorAt(labelTrack2TrackQA[negTrack.globalIndex()]);
648-
existNegTrkQA = true;
649-
} else {
650-
negTrackQA = tracksQA.iteratorAt(0);
651-
existNegTrkQA = false;
652-
}
653-
654-
// gamma
655-
if (static_cast<bool>(posTrack.pidbit() & (1 << 0)) && static_cast<bool>(negTrack.pidbit() & (1 << 0))) {
656-
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
657-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaEl(), posTrack.tofNSigmaEl(), posTrack.tpcExpSignalEl(posTrack.tpcSignalCorrected()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
658-
}
659-
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
660-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaEl(), negTrack.tofNSigmaEl(), negTrack.tpcExpSignalEl(negTrack.tpcSignalCorrected()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
661-
}
662-
}
663-
// Ks0
664-
if (static_cast<bool>(posTrack.pidbit() & (1 << 1)) && static_cast<bool>(negTrack.pidbit() & (1 << 1))) {
665-
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
666-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPi(), posTrack.tofNSigmaPi(), posTrack.tpcExpSignalPi(posTrack.tpcSignalCorrected()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
667-
}
668-
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
669-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPi(), negTrack.tofNSigmaPi(), negTrack.tpcExpSignalPi(negTrack.tpcSignalCorrected()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
670-
}
671-
}
672-
// Lambda
673-
if (static_cast<bool>(posTrack.pidbit() & (1 << 2)) && static_cast<bool>(negTrack.pidbit() & (1 << 2))) {
674-
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
675-
if (std::abs(posTrack.tofNSigmaPr()) <= nSigmaTOFdautrack) {
676-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPr(), posTrack.tofNSigmaPr(), posTrack.tpcExpSignalPr(posTrack.tpcSignal()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
677-
}
678-
}
679-
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
680-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPi(), negTrack.tofNSigmaPi(), negTrack.tpcExpSignalPi(negTrack.tpcSignalCorrected()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
681-
}
682-
}
683-
// Antilambda
684-
if (static_cast<bool>(posTrack.pidbit() & (1 << 3)) && static_cast<bool>(negTrack.pidbit() & (1 << 3))) {
685-
if (downsampleTsalisCharged(posTrack.pt(), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
686-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, posTrack, posTrackQA, existPosTrkQA, collision, posTrack.tpcNSigmaPi(), posTrack.tofNSigmaPi(), posTrack.tpcExpSignalPi(posTrack.tpcSignalCorrected()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
687-
}
688-
if (downsampleTsalisCharged(negTrack.pt(), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
689-
if (std::abs(negTrack.tofNSigmaPr()) <= nSigmaTOFdautrack) {
690-
fillSkimmedV0TableWithdEdxTrQA<true>(v0, negTrack, negTrackQA, existNegTrkQA, collision, negTrack.tpcNSigmaPr(), negTrack.tofNSigmaPr(), negTrack.tpcExpSignalPr(negTrack.tpcSignalCorrected()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
691-
}
692-
}
693-
}
694-
}
695-
696-
/// Loop over cascade candidates
697-
for (const auto& casc : cascs) {
698-
auto bachTrack = casc.bachelor_as<TrksWithDEdxCorrection>();
699-
if (casc.cascaddid() == kUndef) {
700-
continue;
701-
}
702-
703-
aod::TracksQA bachTrackQA;
704-
bool existBachTrkQA;
705-
if (labelTrack2TrackQA[bachTrack.globalIndex()] != -1) {
706-
bachTrackQA = tracksQA.iteratorAt(labelTrack2TrackQA[bachTrack.globalIndex()]);
707-
existBachTrkQA = true;
708-
} else {
709-
bachTrackQA = tracksQA.iteratorAt(0);
710-
existBachTrkQA = false;
711-
}
712-
713-
// Omega and antiomega
714-
if (static_cast<bool>(bachTrack.pidbit() & (1 << kOmega)) || static_cast<bool>(bachTrack.pidbit() & (1 << kAntiOmega))) {
715-
if (downsampleTsalisCharged(bachTrack.pt(), downsamplingTsalisKaons, MassKaon, maxPt4dwnsmplTsalisKaons)) {
716-
fillSkimmedV0TableWithdEdxTrQA<true>(casc, bachTrack, bachTrackQA, existBachTrkQA, collision, bachTrack.tpcNSigmaKa(), bachTrack.tofNSigmaKa(), bachTrack.tpcExpSignalKa(bachTrack.tpcSignal()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
717-
}
718-
}
719-
}
720-
}
616+
runWithdEdxTrQA<true>(collisions, myTracks, myV0s, myCascs, tracksQA, perCollisionTracksWithNewDEdx);
721617
} /// process with dEdx from TrackQA
722618
PROCESS_SWITCH(TreeWriterTpcV0, processWithdEdxTrQAWithCorrecteddEdx, "Standard V0 Samples with dEdx from Track QA for PID with corrected dEdx", false);
723619

0 commit comments

Comments
 (0)