@@ -168,12 +168,14 @@ struct DerivedDataCreatorD0Calibration {
168168 selectorKaon = selectorPion;
169169 }
170170
171- void process (CollisionsWEvSel const & collisions,
172- aod::TrackAssoc const & trackIndices,
173- TracksWCovExtraPid const &,
174- aod::BCsWithTimestamps const &,
175- TrackMeanOccs const &,
176- aod::TracksQAVersion const &)
171+ // main function
172+ template <bool withTrackQa, typename TTrackQa>
173+ void runDataCreation (CollisionsWEvSel const & collisions,
174+ aod::TrackAssoc const & trackIndices,
175+ TracksWCovExtraPid const &,
176+ aod::BCsWithTimestamps const &,
177+ TrackMeanOccs const &,
178+ TTrackQa const &)
177179 {
178180 std::map<int , int > selectedCollisions; // map with indices of selected collisions (key: original AOD Collision table index, value: D0 collision index)
179181 std::map<int , int > selectedTracks; // map with indices of selected tracks (key: original AOD Track table index, value: D0 daughter track index)
@@ -419,7 +421,9 @@ struct DerivedDataCreatorD0Calibration {
419421 // apply BDT models
420422 if (cfgMl.apply ) {
421423 std::vector<float > featuresCandD0 = {dcaPos.getY (), dcaNeg.getY (), chi2PCA, cosPaD0, cosPaXYD0, decLenXYD0, decLenD0, dcaPos.getY () * dcaNeg.getY (), aod::pid_tpc_tof_utils::combineNSigma<false >(trackPos.tpcNSigmaPi (), trackPos.tofNSigmaPi ()), aod::pid_tpc_tof_utils::combineNSigma<false >(trackNeg.tpcNSigmaKa (), trackNeg.tofNSigmaKa ()), trackPos.tpcNSigmaPi (), trackPos.tpcNSigmaKa (), aod::pid_tpc_tof_utils::combineNSigma<false >(trackPos.tpcNSigmaKa (), trackPos.tofNSigmaKa ()), trackNeg.tpcNSigmaPi (), trackNeg.tpcNSigmaKa (), aod::pid_tpc_tof_utils::combineNSigma<false >(trackNeg.tpcNSigmaPi (), trackNeg.tofNSigmaPi ())};
422- mlResponse.isSelectedMl (featuresCandD0, ptD0, bdtScoresD0);
424+ if (!mlResponse.isSelectedMl (featuresCandD0, ptD0, bdtScoresD0)) {
425+ massHypo -= D0MassHypo::D0;
426+ }
423427 }
424428 }
425429 }
@@ -432,7 +436,9 @@ struct DerivedDataCreatorD0Calibration {
432436 // apply BDT models
433437 if (cfgMl.apply ) {
434438 std::vector<float > featuresCandD0bar = {dcaPos.getY (), dcaNeg.getY (), chi2PCA, cosPaD0, cosPaXYD0, decLenXYD0, decLenD0, dcaPos.getY () * dcaNeg.getY (), aod::pid_tpc_tof_utils::combineNSigma<false >(trackNeg.tpcNSigmaPi (), trackNeg.tofNSigmaPi ()), aod::pid_tpc_tof_utils::combineNSigma<false >(trackPos.tpcNSigmaKa (), trackPos.tofNSigmaKa ()), trackNeg.tpcNSigmaPi (), trackNeg.tpcNSigmaKa (), aod::pid_tpc_tof_utils::combineNSigma<false >(trackNeg.tpcNSigmaKa (), trackNeg.tofNSigmaKa ()), trackPos.tpcNSigmaPi (), trackPos.tpcNSigmaKa (), aod::pid_tpc_tof_utils::combineNSigma<false >(trackPos.tpcNSigmaPi (), trackPos.tofNSigmaPi ())};
435- mlResponse.isSelectedMl (featuresCandD0bar, ptD0, bdtScoresD0bar);
439+ if (!mlResponse.isSelectedMl (featuresCandD0bar, ptD0, bdtScoresD0bar)) {
440+ massHypo -= D0MassHypo::D0Bar;
441+ }
436442 }
437443 }
438444 }
@@ -515,33 +521,35 @@ struct DerivedDataCreatorD0Calibration {
515521 int8_t deltaRefGloParamQ2Pt{0 };
516522 int8_t deltaTOFdX{0 };
517523 int8_t deltaTOFdZ{0 };
518- if (trackPos.has_trackQA ()) {
519- auto trackQA = trackPos.trackQA_as <aod::TracksQAVersion>(); // obtain track QA
520- tpcTime0 = trackQA.tpcTime0 ();
521- tpcdEdxNorm = trackQA.tpcdEdxNorm ();
522- tpcDcaR = trackQA.tpcdcaR ();
523- tpcDcaZ = trackQA.tpcdcaZ ();
524- tpcClusterByteMask = trackQA.tpcClusterByteMask ();
525- tpcdEdxMax0R = trackQA.tpcdEdxMax0R ();
526- tpcdEdxMax1R = trackQA.tpcdEdxMax1R ();
527- tpcdEdxMax2R = trackQA.tpcdEdxMax2R ();
528- tpcdEdxMax3R = trackQA.tpcdEdxMax3R ();
529- tpcdEdxTot0R = trackQA.tpcdEdxTot0R ();
530- tpcdEdxTot1R = trackQA.tpcdEdxTot1R ();
531- tpcdEdxTot2R = trackQA.tpcdEdxTot2R ();
532- tpcdEdxTot3R = trackQA.tpcdEdxTot3R ();
533- deltaRefContParamY = trackQA.deltaRefContParamY ();
534- deltaRefITSParamZ = trackQA.deltaRefITSParamZ ();
535- deltaRefContParamSnp = trackQA.deltaRefContParamSnp ();
536- deltaRefContParamTgl = trackQA.deltaRefContParamTgl ();
537- deltaRefContParamQ2Pt = trackQA.deltaRefContParamQ2Pt ();
538- deltaRefGloParamY = trackQA.deltaRefGloParamY ();
539- deltaRefGloParamZ = trackQA.deltaRefGloParamZ ();
540- deltaRefGloParamSnp = trackQA.deltaRefGloParamSnp ();
541- deltaRefGloParamTgl = trackQA.deltaRefGloParamTgl ();
542- deltaRefGloParamQ2Pt = trackQA.deltaRefGloParamQ2Pt ();
543- deltaTOFdX = trackQA.deltaTOFdX ();
544- deltaTOFdZ = trackQA.deltaTOFdZ ();
524+ if constexpr (withTrackQa) {
525+ if (trackPos.has_trackQA ()) {
526+ auto trackQA = trackPos.template trackQA_as <TTrackQa>(); // obtain track QA
527+ tpcTime0 = trackQA.tpcTime0 ();
528+ tpcdEdxNorm = trackQA.tpcdEdxNorm ();
529+ tpcDcaR = trackQA.tpcdcaR ();
530+ tpcDcaZ = trackQA.tpcdcaZ ();
531+ tpcClusterByteMask = trackQA.tpcClusterByteMask ();
532+ tpcdEdxMax0R = trackQA.tpcdEdxMax0R ();
533+ tpcdEdxMax1R = trackQA.tpcdEdxMax1R ();
534+ tpcdEdxMax2R = trackQA.tpcdEdxMax2R ();
535+ tpcdEdxMax3R = trackQA.tpcdEdxMax3R ();
536+ tpcdEdxTot0R = trackQA.tpcdEdxTot0R ();
537+ tpcdEdxTot1R = trackQA.tpcdEdxTot1R ();
538+ tpcdEdxTot2R = trackQA.tpcdEdxTot2R ();
539+ tpcdEdxTot3R = trackQA.tpcdEdxTot3R ();
540+ deltaRefContParamY = trackQA.deltaRefContParamY ();
541+ deltaRefITSParamZ = trackQA.deltaRefITSParamZ ();
542+ deltaRefContParamSnp = trackQA.deltaRefContParamSnp ();
543+ deltaRefContParamTgl = trackQA.deltaRefContParamTgl ();
544+ deltaRefContParamQ2Pt = trackQA.deltaRefContParamQ2Pt ();
545+ deltaRefGloParamY = trackQA.deltaRefGloParamY ();
546+ deltaRefGloParamZ = trackQA.deltaRefGloParamZ ();
547+ deltaRefGloParamSnp = trackQA.deltaRefGloParamSnp ();
548+ deltaRefGloParamTgl = trackQA.deltaRefGloParamTgl ();
549+ deltaRefGloParamQ2Pt = trackQA.deltaRefGloParamQ2Pt ();
550+ deltaTOFdX = trackQA.deltaTOFdX ();
551+ deltaTOFdZ = trackQA.deltaTOFdZ ();
552+ }
545553 }
546554
547555 trackTable (selectedCollisions[collision.globalIndex ()], // stored at PV
@@ -821,6 +829,28 @@ struct DerivedDataCreatorD0Calibration {
821829 } // end loop over positive tracks
822830 } // end loop over collisions tracks
823831 }
832+
833+ // process functions
834+ void processWithTrackQa (CollisionsWEvSel const & collisions,
835+ aod::TrackAssoc const & trackIndices,
836+ TracksWCovExtraPid const & tracks,
837+ aod::BCsWithTimestamps const & bcs,
838+ TrackMeanOccs const & occ,
839+ aod::TracksQAVersion const & trackQa)
840+ {
841+ runDataCreation<true >(collisions, trackIndices, tracks, bcs, occ, trackQa);
842+ }
843+ PROCESS_SWITCH (DerivedDataCreatorD0Calibration, processWithTrackQa, " Process with trackQA enabled" , false );
844+
845+ void processNoTrackQa (CollisionsWEvSel const & collisions,
846+ aod::TrackAssoc const & trackIndices,
847+ TracksWCovExtraPid const & tracks,
848+ aod::BCsWithTimestamps const & bcs,
849+ TrackMeanOccs const & occ)
850+ {
851+ runDataCreation<false >(collisions, trackIndices, tracks, bcs, occ, nullptr );
852+ }
853+ PROCESS_SWITCH (DerivedDataCreatorD0Calibration, processNoTrackQa, " Process without trackQA enabled" , true );
824854};
825855
826856WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments