2121// / \author Federica Zanone <federica.zanone@cern.ch>, Heidelberg University
2222// / \author Ruiqi Yin <ruiqi.yin@cern.ch>, Fudan University
2323
24- #include < algorithm> // std::find
25- #include < iterator> // std::distance
26- #include < string> // std::string
27- #include < vector> // std::vector
28-
29- #include " CommonConstants/PhysicsConstants.h"
30- #include " CCDB/BasicCCDBManager.h" // for PV refit
31- #include " DataFormatsParameters/GRPMagField.h" // for PV refit
32- #include " DataFormatsParameters/GRPObject.h" // for PV refit
33- #include " DCAFitter/DCAFitterN.h"
34- #include " DetectorsBase/Propagator.h" // for PV refit
35- #include " DetectorsVertexing/PVertexer.h" // for PV refit
36- #include " Framework/AnalysisTask.h"
37- #include " Framework/HistogramRegistry.h"
38- #include " Framework/runDataProcessing.h"
39- #include " ReconstructionDataFormats/V0.h"
40- #include " ReconstructionDataFormats/Vertex.h" // for PV refit
24+ #include " PWGHF/Core/CentralityEstimation.h"
25+ #include " PWGHF/Core/SelectorCuts.h"
26+ #include " PWGHF/DataModel/CandidateReconstructionTables.h"
27+ #include " PWGHF/Utils/utilsAnalysis.h"
28+ #include " PWGHF/Utils/utilsBfieldCCDB.h"
29+ #include " PWGHF/Utils/utilsEvSelHf.h"
30+ #include " PWGLF/DataModel/LFStrangenessTables.h"
4131
4232#include " Common/Core/TrackSelectorPID.h"
4333#include " Common/Core/trackUtilities.h"
4737#include " Common/DataModel/TrackSelectionTables.h"
4838#include " Tools/ML/MlResponse.h"
4939
50- #include " PWGLF/DataModel/LFStrangenessTables.h"
40+ #include " CCDB/BasicCCDBManager.h" // for PV refit
41+ #include " CommonConstants/PhysicsConstants.h"
42+ #include " DCAFitter/DCAFitterN.h"
43+ #include " DataFormatsParameters/GRPMagField.h" // for PV refit
44+ #include " DataFormatsParameters/GRPObject.h" // for PV refit
45+ #include " DetectorsBase/Propagator.h" // for PV refit
46+ #include " DetectorsVertexing/PVertexer.h" // for PV refit
47+ #include " Framework/AnalysisTask.h"
48+ #include " Framework/HistogramRegistry.h"
49+ #include " Framework/runDataProcessing.h"
50+ #include " ReconstructionDataFormats/V0.h"
51+ #include " ReconstructionDataFormats/Vertex.h" // for PV refit
5152
52- #include " PWGHF/Core/CentralityEstimation.h"
53- #include " PWGHF/Core/SelectorCuts.h"
54- #include " PWGHF/DataModel/CandidateReconstructionTables.h"
55- #include " PWGHF/Utils/utilsAnalysis.h"
56- #include " PWGHF/Utils/utilsBfieldCCDB.h"
57- #include " PWGHF/Utils/utilsEvSelHf.h"
53+ #include < algorithm> // std::find
54+ #include < iterator> // std::distance
55+ #include < string> // std::string
56+ #include < vector> // std::vector
5857
5958using namespace o2 ;
6059using namespace o2 ::analysis;
@@ -108,7 +107,7 @@ struct HfTrackIndexSkimCreatorTagSelCollisions {
108107
109108 void init (InitContext const &)
110109 {
111- std::array<int , 6 > doProcess = {doprocessTrigAndCentFT0ASel, doprocessTrigAndCentFT0CSel, doprocessTrigAndCentFT0MSel, doprocessTrigAndCentFV0ASel, doprocessTrigSel, doprocessNoTrigSel};
110+ std::array<int , 7 > doProcess = {doprocessTrigAndCentFT0ASel, doprocessTrigAndCentFT0CSel, doprocessTrigAndCentFT0MSel, doprocessTrigAndCentFV0ASel, doprocessTrigSel, doprocessNoTrigSel, doprocessUpcSel };
112111 if (std::accumulate (doProcess.begin (), doProcess.end (), 0 ) != 1 ) {
113112 LOGP (fatal, " One and only one process function for collision selection can be enabled at a time!" );
114113 }
@@ -132,11 +131,19 @@ struct HfTrackIndexSkimCreatorTagSelCollisions {
132131
133132 // / Collision selection
134133 // / \param collision collision table with
135- template <bool applyTrigSel, o2::hf_centrality::CentralityEstimator centEstimator, typename Col, typename BCs >
136- void selectCollision (const Col& collision, const BCs& )
134+ template <bool applyTrigSel, bool applyUPCSel, o2::hf_centrality::CentralityEstimator centEstimator, typename Col, typename BCsType >
135+ void selectCollision (const Col& collision, const BCsType& bcs )
137136 {
138137 float centrality = -1 .;
139- const auto rejectionMask = hfEvSel.getHfCollisionRejectionMask <applyTrigSel, centEstimator, BCs>(collision, centrality, ccdb, registry);
138+ uint32_t rejectionMask;
139+
140+ if constexpr (applyUPCSel) {
141+ rejectionMask = hfEvSel.getHfCollisionRejectionMaskWithUPC <applyTrigSel, centEstimator, BCsType>(
142+ collision, centrality, ccdb, registry, bcs);
143+ } else {
144+ rejectionMask = hfEvSel.getHfCollisionRejectionMask <applyTrigSel, centEstimator, BCsType>(
145+ collision, centrality, ccdb, registry);
146+ }
140147
141148 if (fillHistograms) {
142149 hfEvSel.fillHistograms (collision, rejectionMask, centrality);
@@ -155,46 +162,54 @@ struct HfTrackIndexSkimCreatorTagSelCollisions {
155162 }
156163
157164 // / Event selection with trigger and FT0A centrality selection
158- void processTrigAndCentFT0ASel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0As>::iterator const & collision, aod::BCsWithTimestamps const & bcs)
165+ void
166+ processTrigAndCentFT0ASel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0As>::iterator const & collision, aod::BCFullInfos const & bcs)
159167 {
160- selectCollision<true , CentralityEstimator::FT0A>(collision, bcs);
168+ selectCollision<true , false , CentralityEstimator::FT0A>(collision, bcs);
161169 }
162170 PROCESS_SWITCH (HfTrackIndexSkimCreatorTagSelCollisions, processTrigAndCentFT0ASel, " Use trigger and centrality selection with FT0A" , false );
163171
164172 // / Event selection with trigger and FT0C centrality selection
165- void processTrigAndCentFT0CSel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs>::iterator const & collision, aod::BCsWithTimestamps const & bcs)
173+ void processTrigAndCentFT0CSel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs>::iterator const & collision, aod::BCFullInfos const & bcs)
166174 {
167- selectCollision<true , CentralityEstimator::FT0C>(collision, bcs);
175+ selectCollision<true , false , CentralityEstimator::FT0C>(collision, bcs);
168176 }
169177 PROCESS_SWITCH (HfTrackIndexSkimCreatorTagSelCollisions, processTrigAndCentFT0CSel, " Use trigger and centrality selection with FT0C" , false );
170178
171179 // / Event selection with trigger and FT0M centrality selection
172- void processTrigAndCentFT0MSel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const & collision, aod::BCsWithTimestamps const & bcs)
180+ void processTrigAndCentFT0MSel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const & collision, aod::BCFullInfos const & bcs)
173181 {
174- selectCollision<true , CentralityEstimator::FT0M>(collision, bcs);
182+ selectCollision<true , false , CentralityEstimator::FT0M>(collision, bcs);
175183 }
176184 PROCESS_SWITCH (HfTrackIndexSkimCreatorTagSelCollisions, processTrigAndCentFT0MSel, " Use trigger and centrality selection with FT0M" , false );
177185
178186 // / Event selection with trigger and FV0A centrality selection
179- void processTrigAndCentFV0ASel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFV0As>::iterator const & collision, aod::BCsWithTimestamps const & bcs)
187+ void processTrigAndCentFV0ASel (soa::Join<aod::Collisions, aod::EvSels, aod::CentFV0As>::iterator const & collision, aod::BCFullInfos const & bcs)
180188 {
181- selectCollision<true , CentralityEstimator::FV0A>(collision, bcs);
189+ selectCollision<true , false , CentralityEstimator::FV0A>(collision, bcs);
182190 }
183191 PROCESS_SWITCH (HfTrackIndexSkimCreatorTagSelCollisions, processTrigAndCentFV0ASel, " Use trigger and centrality selection with FV0A" , false );
184192
185193 // / Event selection with trigger selection
186- void processTrigSel (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, aod::BCsWithTimestamps const & bcs)
194+ void processTrigSel (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, aod::BCFullInfos const & bcs)
187195 {
188- selectCollision<true , CentralityEstimator::None>(collision, bcs);
196+ selectCollision<true , false , CentralityEstimator::None>(collision, bcs);
189197 }
190198 PROCESS_SWITCH (HfTrackIndexSkimCreatorTagSelCollisions, processTrigSel, " Use trigger selection" , false );
191199
192200 // / Event selection without trigger selection
193- void processNoTrigSel (aod::Collision const & collision, aod::BCsWithTimestamps const & bcs)
201+ void processNoTrigSel (aod::Collision const & collision, aod::BCFullInfos const & bcs)
194202 {
195- selectCollision<false , CentralityEstimator::None>(collision, bcs);
203+ selectCollision<false , false , CentralityEstimator::None>(collision, bcs);
196204 }
197205 PROCESS_SWITCH (HfTrackIndexSkimCreatorTagSelCollisions, processNoTrigSel, " Do not use trigger selection" , true );
206+
207+ // / Event selection with UPC
208+ void processUpcSel (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, aod::BCFullInfos const & bcs, aod::FT0s const & /* ft0s*/ , aod::FV0As const & /* fv0as*/ , aod::FDDs const & /* fdds*/ , aod::Zdcs const & /* zdcs*/ )
209+ {
210+ selectCollision<true , true , CentralityEstimator::None>(collision, bcs);
211+ }
212+ PROCESS_SWITCH (HfTrackIndexSkimCreatorTagSelCollisions, processUpcSel, " Use upc selection" , false );
198213};
199214
200215// / Track selection
@@ -1246,7 +1261,7 @@ struct HfTrackIndexSkimCreator {
12461261 using FilteredTrackAssocSel = soa::Filtered<soa::Join<aod::TrackAssoc, aod::HfSelTrack>>;
12471262
12481263 // filter collisions
1249- Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == static_cast <uint16_t >(0 ));
1264+ Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == static_cast <uint32_t >(0 ));
12501265 // filter track indices
12511266 Filter filterSelectTrackIds = ((aod::hf_sel_track::isSelProng & static_cast <uint32_t >(BIT(CandidateType::Cand2Prong))) != 0u ) || ((aod::hf_sel_track::isSelProng & static_cast <uint32_t >(BIT(CandidateType::Cand3Prong))) != 0u ) || ((aod::hf_sel_track::isSelProng & static_cast <uint32_t >(BIT(CandidateType::CandDstar))) != 0u );
12521267
@@ -3058,7 +3073,7 @@ struct HfTrackIndexSkimCreatorCascades {
30583073 using SelectedCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::HfSelCollision>>;
30593074 using FilteredTrackAssocSel = soa::Filtered<soa::Join<aod::TrackAssoc, aod::HfSelTrack>>;
30603075
3061- Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == static_cast <uint16_t >(0 ));
3076+ Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == static_cast <uint32_t >(0 ));
30623077 Filter filterSelectTrackIds = (aod::hf_sel_track::isSelProng & static_cast <uint32_t >(BIT(CandidateType::CandV0bachelor))) != 0u && (config.applyProtonPid == false || (aod::hf_sel_track::isIdentifiedPid & static_cast <uint32_t >(BIT(ChannelsProtonPid::LcToPK0S))) != 0u );
30633078
30643079 Preslice<FilteredTrackAssocSel> trackIndicesPerCollision = aod::track_association::collisionId;
@@ -3337,7 +3352,7 @@ struct HfTrackIndexSkimCreatorLfCascades {
33373352 using CascFull = soa::Join<aod::CascDatas, aod::CascCovs>;
33383353 using V0Full = soa::Join<aod::V0Datas, aod::V0Covs>;
33393354
3340- Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == static_cast <uint16_t >(0 ));
3355+ Filter filterSelectCollisions = (aod::hf_sel_collision::whyRejectColl == static_cast <uint32_t >(0 ));
33413356 Filter filterSelectTrackIds = (aod::hf_sel_track::isSelProng & static_cast <uint32_t >(BIT(CandidateType::CandCascadeBachelor))) != 0u ;
33423357
33433358 Preslice<aod::TracksWCovDca> tracksPerCollision = aod::track::collisionId; // needed for PV refit
0 commit comments