@@ -54,7 +54,6 @@ using namespace o2;
5454using namespace o2 ::framework;
5555using namespace o2 ::framework::expressions;
5656
57- using TracksFull = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TOFSignal, aod::TOFEvTime>;
5857using TracksFullPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TOFSignal, aod::TOFEvTime, aod::pidTOFPr>;
5958using TracksFullIUPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::TOFSignal, aod::TOFEvTime, aod::pidTOFPr>;
6059using BCsWithRun2Info = soa::Join<aod::BCs, aod::Run2BCInfos, aod::Timestamps>;
@@ -258,6 +257,7 @@ struct EbyeMaker {
258257
259258 Configurable<LabeledArray<float >> cfgTrackSels{" cfgTrackSels" , {kTrackSels , 1 , 12 , particleName, trackSelsNames}, " Track selections" };
260259 Configurable<LabeledArray<float >> cfgDcaSelsParam{" cfgDcaSelsParam" , {kDcaSelsParam [0 ], 3 , 3 , dcaSelsNames, dcaParNames}, " DCA threshold settings" };
260+ Configurable<bool > fillMini{" fillMini" , false , " fill mini tables" };
261261
262262 std::array<float , kNpart > ptMin;
263263 std::array<float , kNpart > ptTof;
@@ -267,7 +267,6 @@ struct EbyeMaker {
267267
268268 HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
269269
270- Preslice<TracksFull> perCollisionTracksFull = o2::aod::track::collisionId;
271270 Preslice<TracksFullPID> perCollisionTracksFullPID = o2::aod::track::collisionId;
272271 Preslice<TracksFullIUPID> perCollisionTracksFullIUPID = o2::aod::track::collisionId;
273272 Preslice<aod::V0s> perCollisionV0 = o2::aod::v0::collisionId;
@@ -427,12 +426,40 @@ struct EbyeMaker {
427426 return static_cast <float >((track.tpcSignal () - expBethe) / expSigma);
428427 }
429428
430- template <class T >
431- float getOuterPID ( T const & track )
429+ template <const bool isMc, class T >
430+ void fillTableMiniTrack (CandidateTrack& candidateTrack, T const & tk, float const & nSigmaITS = - 999 .f )
432431 {
433- if (!(doprocessRun2 || doprocessMcRun2) && track.hasTOF () && track.pt () > antipPtTof)
434- return track.tofNSigmaPr ();
435- return -999 .f ;
432+ int selMask = -1 ;
433+ if ((isMc && candidateTrack.isreco ) || !isMc) {
434+ float outerPID = tk.pt () > antipPtTof ? tk.tofNSigmaPr () : -999 .f ;
435+ candidateTrack.itsnsigma = nSigmaITS;
436+ candidateTrack.outerPID = tk.pt () < antipPtTof ? candidateTrack.outerPID : outerPID;
437+ selMask = getTrackSelMask (candidateTrack);
438+ if (candidateTrack.outerPID < outerPIDMin)
439+ return ;
440+ if (isMc && candidateTrack.pdgcodemoth > 0 )
441+ selMask |= candidateTrack.pdgcodemoth ;
442+ } else if (isMc && candidateTrack.pdgcodemoth > 0 ) {
443+ selMask = candidateTrack.pdgcodemoth ;
444+ }
445+ if (isMc && selMask >= 0 ) {
446+ mcMiniTrkTable (
447+ miniCollTable.lastIndex (),
448+ candidateTrack.pt ,
449+ static_cast <int8_t >(candidateTrack.eta * 100 ),
450+ selMask,
451+ candidateTrack.outerPID ,
452+ candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt ,
453+ static_cast <int8_t >(candidateTrack.geneta * 100 ),
454+ candidateTrack.isreco );
455+ } else if (!isMc) {
456+ miniTrkTable (
457+ miniCollTable.lastIndex (),
458+ candidateTrack.pt ,
459+ static_cast <int8_t >(candidateTrack.eta * 100 ),
460+ selMask,
461+ candidateTrack.outerPID );
462+ }
436463 }
437464
438465 template <class T >
@@ -523,8 +550,6 @@ struct EbyeMaker {
523550 {
524551 if (doprocessRun3 || doprocessMcRun3)
525552 return tracksAll.sliceBy (perCollisionTracksFullIUPID, collId);
526- else if (doprocessRun2 || doprocessMcRun2)
527- return tracksAll.sliceBy (perCollisionTracksFull, collId);
528553 else
529554 return tracksAll.sliceBy (perCollisionTracksFullPID, collId);
530555 }
@@ -912,27 +937,15 @@ struct EbyeMaker {
912937 fillRecoEvent (collision, tracks, v0TableThisCollision, centrality);
913938
914939 miniCollTable (static_cast <int8_t >(collision.posZ () * 10 ), 0x0 , nTrackletsColl, centrality, nTracksColl);
915-
916940 for (auto & candidateTrack : candidateTracks[0 ]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
917941 auto tk = tracks.rawIteratorAt (candidateTrack.globalIndex );
918- float outerPID = getOuterPID (tk);
919- candidateTrack.itsnsigma = -999 .f ;
920- candidateTrack.outerPID = tk.pt () < antipPtTof ? candidateTrack.outerPID : outerPID;
921- int selMask = getTrackSelMask (candidateTrack);
922- if (candidateTrack.outerPID < outerPIDMin)
923- continue ;
924- miniTrkTable (
925- miniCollTable.lastIndex (),
926- candidateTrack.pt ,
927- static_cast <int8_t >(candidateTrack.eta * 100 ),
928- selMask,
929- candidateTrack.outerPID );
942+ fillTableMiniTrack<false >(candidateTrack, tk);
930943 }
931944 }
932945 }
933946 PROCESS_SWITCH (EbyeMaker, processRun3, " process (Run 3)" , false );
934947
935- void processRun2 (soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms, aod::CentRun2CL0s, aod::TrackletMults> const & collisions, TracksFull const & tracks, aod::V0s const & V0s, BCsWithRun2Info const &)
948+ void processRun2 (soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms, aod::CentRun2CL0s, aod::TrackletMults> const & collisions, TracksFullPID const & tracks, aod::V0s const & V0s, BCsWithRun2Info const &)
936949 {
937950 for (const auto & collision : collisions) {
938951 auto bc = collision.bc_as <BCsWithRun2Info>();
@@ -974,32 +987,38 @@ struct EbyeMaker {
974987 histos.fill (HIST (" QA/V0MvsCL0" ), centralityCl0, centrality);
975988 histos.fill (HIST (" QA/trackletsVsV0M" ), centrality, multTracklets);
976989
977- collisionEbyeTable (centrality, collision.posZ ());
978-
979- for (const auto & candidateV0 : candidateV0s) {
980- lambdaEbyeTable (
981- collisionEbyeTable.lastIndex (),
982- candidateV0.pt ,
983- candidateV0.eta ,
984- candidateV0.mass ,
985- candidateV0.dcav0pv ,
986- candidateV0.dcav0daugh ,
987- candidateV0.cpa ,
988- candidateV0.globalIndexNeg ,
989- candidateV0.globalIndexPos );
990- }
991-
992- for (int iP{0 }; iP < kNpart ; ++iP) {
993- for (const auto & candidateTrack : candidateTracks[iP]) { // deuterons + protons
994- nucleiEbyeTable (
990+ if (fillMini) {
991+ miniCollTable (static_cast <int8_t >(collision.posZ () * 10 ), 0x0 , nTrackletsColl, centrality, nTracksColl);
992+ for (auto & candidateTrack : candidateTracks[0 ]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
993+ auto tk = tracks.rawIteratorAt (candidateTrack.globalIndex );
994+ fillTableMiniTrack<false >(candidateTrack, tk);
995+ }
996+ } else {
997+ collisionEbyeTable (centrality, collision.posZ ());
998+ for (const auto & candidateV0 : candidateV0s) {
999+ lambdaEbyeTable (
9951000 collisionEbyeTable.lastIndex (),
996- candidateTrack.pt ,
997- candidateTrack.eta ,
998- candidateTrack.mass ,
999- candidateTrack.dcapv ,
1000- candidateTrack.tpcncls ,
1001- candidateTrack.tpcnsigma ,
1002- candidateTrack.tofmass );
1001+ candidateV0.pt ,
1002+ candidateV0.eta ,
1003+ candidateV0.mass ,
1004+ candidateV0.dcav0pv ,
1005+ candidateV0.dcav0daugh ,
1006+ candidateV0.cpa ,
1007+ candidateV0.globalIndexNeg ,
1008+ candidateV0.globalIndexPos );
1009+ }
1010+ for (int iP{0 }; iP < kNpart ; ++iP) {
1011+ for (const auto & candidateTrack : candidateTracks[iP]) { // deuterons + protons
1012+ nucleiEbyeTable (
1013+ collisionEbyeTable.lastIndex (),
1014+ candidateTrack.pt ,
1015+ candidateTrack.eta ,
1016+ candidateTrack.mass ,
1017+ candidateTrack.dcapv ,
1018+ candidateTrack.tpcncls ,
1019+ candidateTrack.tpcnsigma ,
1020+ candidateTrack.tofmass );
1021+ }
10031022 }
10041023 }
10051024 }
@@ -1047,24 +1066,13 @@ struct EbyeMaker {
10471066 if (triggerCut != 0x0 && (trigger & triggerCut) != triggerCut) {
10481067 continue ;
10491068 }
1050- miniCollTable (static_cast <int8_t >(collision.posZ () * 10 ), trigger, nTrackletsColl, centrality, nTracksColl);
10511069
1070+ miniCollTable (static_cast <int8_t >(collision.posZ () * 10 ), trigger, nTrackletsColl, centrality, nTracksColl);
10521071 for (auto & candidateTrack : candidateTracks[0 ]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
10531072 auto tk = tracks.rawIteratorAt (candidateTrack.globalIndex );
1054- float outerPID = getOuterPID (tk);
10551073 auto [itsSignal, nSigmaITS] = getITSSignal (tk, trackExtraRun2);
10561074 histos.fill (HIST (" QA/itsSignal" ), tk.p (), itsSignal);
1057- candidateTrack.itsnsigma = nSigmaITS;
1058- candidateTrack.outerPID = tk.pt () < antipPtTof ? candidateTrack.outerPID : outerPID;
1059- int selMask = getTrackSelMask (candidateTrack);
1060- if (candidateTrack.outerPID < outerPIDMin)
1061- continue ;
1062- miniTrkTable (
1063- miniCollTable.lastIndex (),
1064- candidateTrack.pt ,
1065- static_cast <int8_t >(candidateTrack.eta * 100 ),
1066- selMask,
1067- candidateTrack.outerPID );
1075+ fillTableMiniTrack<false >(candidateTrack, tk, nSigmaITS);
10681076 }
10691077 }
10701078 }
@@ -1091,37 +1099,15 @@ struct EbyeMaker {
10911099 fillMcGen (mcParticles, mcLab, collision.mcCollisionId ());
10921100
10931101 miniCollTable (static_cast <int8_t >(collision.posZ () * 10 ), nChPartGen, nTrackletsColl, centrality, nTracksColl);
1094-
10951102 for (auto & candidateTrack : candidateTracks[0 ]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
1096- int selMask = -1 ;
1097- if (candidateTrack.isreco ) {
1098- auto tk = tracks.rawIteratorAt (candidateTrack.globalIndex );
1099- float outerPID = getOuterPID (tk);
1100- candidateTrack.itsnsigma = -999 .f ;
1101- candidateTrack.outerPID = tk.pt () < antipPtTof ? candidateTrack.outerPID : outerPID;
1102- selMask = getTrackSelMask (candidateTrack);
1103- if (candidateTrack.pdgcodemoth > 0 )
1104- selMask |= candidateTrack.pdgcodemoth ;
1105- } else if (candidateTrack.pdgcodemoth > 0 ) {
1106- selMask = candidateTrack.pdgcodemoth ;
1107- }
1108- if (selMask < 0 )
1109- continue ;
1110- mcMiniTrkTable (
1111- miniCollTable.lastIndex (),
1112- candidateTrack.pt ,
1113- static_cast <int8_t >(candidateTrack.eta * 100 ),
1114- selMask,
1115- candidateTrack.outerPID ,
1116- candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt ,
1117- static_cast <int8_t >(candidateTrack.geneta * 100 ),
1118- candidateTrack.isreco );
1103+ auto tk = candidateTrack.isreco ? tracks.rawIteratorAt (candidateTrack.globalIndex ) : tracks.rawIteratorAt (0 );
1104+ fillTableMiniTrack<true >(candidateTrack, tk);
11191105 }
11201106 }
11211107 }
11221108 PROCESS_SWITCH (EbyeMaker, processMcRun3, " process MC (Run 3)" , false );
11231109
1124- void processMcRun2 (soa::Join<aod::Collisions, aod::McCollisionLabels, aod::CentRun2V0Ms> const & collisions, aod::McCollisions const & /* mcCollisions*/ , TracksFull const & tracks, aod::V0s const & V0s, aod::McParticles const & mcParticles, aod::McTrackLabels const & mcLab, BCsWithRun2Info const &)
1110+ void processMcRun2 (soa::Join<aod::Collisions, aod::McCollisionLabels, aod::CentRun2V0Ms> const & collisions, aod::McCollisions const & /* mcCollisions*/ , TracksFullPID const & tracks, aod::V0s const & V0s, aod::McParticles const & mcParticles, aod::McTrackLabels const & mcLab, BCsWithRun2Info const &)
11251111 {
11261112 for (const auto & collision : collisions) {
11271113 auto bc = collision.bc_as <BCsWithRun2Info>();
@@ -1143,40 +1129,46 @@ struct EbyeMaker {
11431129 fillMcEvent (collision, tracks, v0TableThisCollision, centrality, mcParticles, mcLab);
11441130 fillMcGen (mcParticles, mcLab, collision.mcCollisionId ());
11451131
1146- collisionEbyeTable (centrality, collision.posZ ());
1147-
1148- for (const auto & candidateV0 : candidateV0s) {
1149- mcLambdaEbyeTable (
1150- collisionEbyeTable.lastIndex (),
1151- candidateV0.pt ,
1152- candidateV0.eta ,
1153- candidateV0.mass ,
1154- candidateV0.dcav0pv ,
1155- candidateV0.dcav0daugh ,
1156- candidateV0.cpa ,
1157- candidateV0.globalIndexNeg ,
1158- candidateV0.globalIndexPos ,
1159- candidateV0.genpt ,
1160- candidateV0.geneta ,
1161- candidateV0.pdgcode ,
1162- candidateV0.isreco );
1163- }
1164-
1165- for (int iP{0 }; iP < kNpart ; ++iP) {
1166- for (const auto & candidateTrack : candidateTracks[iP]) { // deuterons + protons
1167- mcNucleiEbyeTable (
1132+ if (fillMini) {
1133+ miniCollTable (static_cast <int8_t >(collision.posZ () * 10 ), nChPartGen, nTrackletsColl, centrality, nTracksColl);
1134+ for (auto & candidateTrack : candidateTracks[0 ]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
1135+ auto tk = candidateTrack.isreco ? tracks.rawIteratorAt (candidateTrack.globalIndex ) : tracks.rawIteratorAt (0 );
1136+ fillTableMiniTrack<true >(candidateTrack, tk);
1137+ }
1138+ } else {
1139+ collisionEbyeTable (centrality, collision.posZ ());
1140+ for (const auto & candidateV0 : candidateV0s) {
1141+ mcLambdaEbyeTable (
11681142 collisionEbyeTable.lastIndex (),
1169- candidateTrack.pt ,
1170- candidateTrack.eta ,
1171- candidateTrack.mass ,
1172- candidateTrack.dcapv ,
1173- candidateTrack.tpcncls ,
1174- candidateTrack.tpcnsigma ,
1175- candidateTrack.tofmass ,
1176- candidateTrack.genpt ,
1177- candidateTrack.geneta ,
1178- candidateTrack.pdgcode ,
1179- candidateTrack.isreco );
1143+ candidateV0.pt ,
1144+ candidateV0.eta ,
1145+ candidateV0.mass ,
1146+ candidateV0.dcav0pv ,
1147+ candidateV0.dcav0daugh ,
1148+ candidateV0.cpa ,
1149+ candidateV0.globalIndexNeg ,
1150+ candidateV0.globalIndexPos ,
1151+ candidateV0.genpt ,
1152+ candidateV0.geneta ,
1153+ candidateV0.pdgcode ,
1154+ candidateV0.isreco );
1155+ }
1156+ for (int iP{0 }; iP < kNpart ; ++iP) {
1157+ for (const auto & candidateTrack : candidateTracks[iP]) { // deuterons + protons
1158+ mcNucleiEbyeTable (
1159+ collisionEbyeTable.lastIndex (),
1160+ candidateTrack.pt ,
1161+ candidateTrack.eta ,
1162+ candidateTrack.mass ,
1163+ candidateTrack.dcapv ,
1164+ candidateTrack.tpcncls ,
1165+ candidateTrack.tpcnsigma ,
1166+ candidateTrack.tofmass ,
1167+ candidateTrack.genpt ,
1168+ candidateTrack.geneta ,
1169+ candidateTrack.pdgcode ,
1170+ candidateTrack.isreco );
1171+ }
11801172 }
11811173 }
11821174 }
@@ -1206,33 +1198,12 @@ struct EbyeMaker {
12061198 fillMcGen (mcParticles, mcLab, collision.mcCollisionId ());
12071199
12081200 miniCollTable (static_cast <int8_t >(collision.posZ () * 10 ), nChPartGen, nTrackletsColl, centrality, nTracksColl);
1209-
12101201 for (auto & candidateTrack : candidateTracks[0 ]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
1211- int selMask = -1 ;
1212- if (candidateTrack.isreco ) {
1213- auto tk = tracks.rawIteratorAt (candidateTrack.globalIndex );
1214- float outerPID = getOuterPID (tk);
1215- auto [itsSignal, nSigmaITS] = getITSSignal (tk, trackExtraRun2);
1202+ auto tk = candidateTrack.isreco ? tracks.rawIteratorAt (candidateTrack.globalIndex ) : tracks.rawIteratorAt (0 );
1203+ auto [itsSignal, nSigmaITS] = getITSSignal (tk, trackExtraRun2);
1204+ if (candidateTrack.isreco )
12161205 histos.fill (HIST (" QA/itsSignal" ), tk.p (), itsSignal);
1217- candidateTrack.itsnsigma = nSigmaITS;
1218- candidateTrack.outerPID = tk.pt () < antipPtTof ? candidateTrack.outerPID : outerPID;
1219- selMask = getTrackSelMask (candidateTrack);
1220- if (candidateTrack.pdgcodemoth > 0 )
1221- selMask |= candidateTrack.pdgcodemoth ;
1222- } else if (candidateTrack.pdgcodemoth > 0 ) {
1223- selMask = candidateTrack.pdgcodemoth ;
1224- }
1225- if (selMask < 0 )
1226- continue ;
1227- mcMiniTrkTable (
1228- miniCollTable.lastIndex (),
1229- candidateTrack.pt ,
1230- static_cast <int8_t >(candidateTrack.eta * 100 ),
1231- selMask,
1232- candidateTrack.outerPID ,
1233- candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt ,
1234- static_cast <int8_t >(candidateTrack.geneta * 100 ),
1235- candidateTrack.isreco );
1206+ fillTableMiniTrack<true >(candidateTrack, tk, nSigmaITS);
12361207 }
12371208 }
12381209 }
0 commit comments