@@ -49,23 +49,29 @@ using namespace o2::framework;
4949using namespace o2 ::framework::expressions;
5050using namespace o2 ::aod::fwdtrack;
5151
52- using MyCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Ms>;
53- using MyTracks = soa::Join<aod::FullTracks, aod::TracksExtra, aod::TracksIU, aod::TracksDCA, aod::TrackSelection>;
54- using MyMuons = soa::Join<aod::FwdTracks, aod::FwdTracksDCA>;
55- using MyMcMuons = soa::Join<aod::FwdTracks, aod::McFwdTrackLabels, aod::FwdTracksDCA>;
56- using MFTTracksExtra = soa::Join<aod::MFTTracks>;
57-
5852struct HfTaskSingleMuonMult {
59- Configurable<float > etaMin{" etaMin" , -3.6 , " eta minimum value" };
60- Configurable<float > etaMax{" etaMax" , -2.5 , " eta maximum value" };
61- Configurable<float > pDcaMin{" pDcaMin" , 324 ., " p*DCA maximum value for small Rabs" };
62- Configurable<float > pDcaMax{" pDcaMax" , 594 ., " p*DCA maximum value for large Rabs" };
63- Configurable<float > rAbsMin{" rAbsMin" , 17.6 , " R at absorber end minimum value" };
64- Configurable<float > rAbsMax{" rAbsMax" , 89.5 , " R at absorber end maximum value" };
65- Configurable<float > rAbsMid{" rAbsMid" , 26.5 , " R at absorber end split point for different p*DCA selections" };
66- Configurable<float > zVtx{" zVtx" , 10 ., " Z edge of primary vertex [cm]" };
53+ Configurable<float > zVtxMax{" zVtxMax" , 10 ., " maxium z of primary vertex [cm]" };
54+ Configurable<float > ptTrackLow{" ptTrackLow" , 0.15 , " minimum pt of tracks" };
55+ Configurable<float > etaTrackMax{" etaTrackMax" , 0.8 , " maximum pseudorapidity of tracks" };
56+ Configurable<float > etaMin{" etaMin" , -3.6 , " minimum pseudorapidity" };
57+ Configurable<float > etaMax{" etaMax" , -2.5 , " maximum pseudorapidity" };
58+ Configurable<float > pDcaMin{" pDcaMin" , 324 ., " p*DCA value for small Rabsorb" };
59+ Configurable<float > pDcaMax{" pDcaMax" , 594 ., " p*DCA value for large Rabsorb" };
60+ Configurable<float > rAbsorbMin{" rAbsorbMin" , 17.6 , " R at absorber end minimum value" };
61+ Configurable<float > rAbsorbMax{" rAbsorbMax" , 89.5 , " R at absorber end maximum value" };
62+ Configurable<float > rAbsorbMid{" rAbsorbMid" , 26.5 , " R at absorber end split point for different p*DCA selections" };
6763 Configurable<bool > reduceOrphMft{" reduceOrphMft" , true , " reduce orphan MFT tracks" };
6864
65+ // Track Filter
66+ Filter globalTrackFilter = (o2::aod::track::isGlobalTrack == true );
67+ Filter ptTrackFilter = (o2::aod::track::pt) > ptTrackLow;
68+ Filter etaTrackFilter = (nabs(o2::aod::track::eta) < etaTrackMax);
69+
70+ using MyCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Ms>;
71+ using MyMuons = soa::Join<aod::FwdTracks, aod::FwdTracksDCA>;
72+ using MyMcMuons = soa::Join<aod::FwdTracks, aod::McFwdTrackLabels, aod::FwdTracksDCA>;
73+ using MyTracks = soa::Filtered<soa::Join<aod::FullTracks, aod::TracksExtra, aod::TracksIU, aod::TracksDCA, aod::TrackSelection>>;
74+
6975 HistogramRegistry registry{" registry" };
7076 static constexpr std::string_view kTrackType [] = {" TrackType0" , " TrackType1" , " TrackType2" , " TrackType3" , " TrackType4" };
7177
@@ -76,12 +82,12 @@ struct HfTaskSingleMuonMult {
7682 AxisSpec axisEventSize{500 , 0.5 , 500.5 , " Event Size" };
7783 AxisSpec axisVtxZ{80 , -20 ., 20 ., " #it{z}_{vtx} (cm)" };
7884 AxisSpec axisMuTrk{5 , 0.5 , 5.5 , " Muon Selection" };
79- AxisSpec axisNch{500 , 0.5 , 500.5 , " N_ {ch}" };
80- AxisSpec axisNmu{20 , -0.5 , 19.5 , " N_ {#mu}" };
85+ AxisSpec axisNch{500 , 0.5 , 500.5 , " #it{N}_ {ch}" };
86+ AxisSpec axisNmu{20 , -0.5 , 19.5 , " #it{N}_ {#mu}" };
8187 AxisSpec axisPt{1000 , 0 ., 500 ., " #it{p}_{T} (GeV/#it{c})" };
8288 AxisSpec axisEta{250 , -5 ., 5 ., " #it{#eta}" };
8389 AxisSpec axisTheta{500 , 170 ., 180 ., " #it{#theta}" };
84- AxisSpec axisRabs {1000 , 0 ., 100 ., " R_{abs } (cm)" };
90+ AxisSpec axisRabsorb {1000 , 0 ., 100 ., " #it{R}_{absorb } (cm)" };
8591 AxisSpec axisDCA{500 , 0 ., 5 ., " #it{DCA}_{xy} (cm)" };
8692 AxisSpec axisChi2MatchMCHMFT{1000 , 0 ., 1000 ., " MCH-MFT matching #chi^{2}" };
8793 AxisSpec axisSign{5 , -2.5 , 2.5 , " Charge" };
@@ -98,8 +104,8 @@ struct HfTaskSingleMuonMult {
98104 HistogramConfigSpec hVtxZ{HistType::kTH1F , {axisVtxZ}};
99105
100106 HistogramConfigSpec hMuTrkSel{HistType::kTH1F , {axisMuTrk}};
101- HistogramConfigSpec hTHnMu{HistType::kTHnSparseF , {axisCent, axisNch, axisPt, axisEta, axisTheta, axisRabs , axisDCA, axisPDca, axisChi2MatchMCHMFT, axisTrackType}, 10 };
102- HistogramConfigSpec hTHnMuDeltaPt{HistType::kTHnSparseF , {axisCent, axisNch, axisPt, axisEta, axisTheta, axisRabs , axisDCA, axisPDca, axisChi2MatchMCHMFT, axisDeltaPt}, 10 };
107+ HistogramConfigSpec hTHnMu{HistType::kTHnSparseF , {axisCent, axisNch, axisPt, axisEta, axisTheta, axisRabsorb , axisDCA, axisPDca, axisChi2MatchMCHMFT, axisTrackType}, 10 };
108+ HistogramConfigSpec hTHnMuDeltaPt{HistType::kTHnSparseF , {axisCent, axisNch, axisPt, axisEta, axisTheta, axisRabsorb , axisDCA, axisPDca, axisChi2MatchMCHMFT, axisDeltaPt}, 10 };
103109 HistogramConfigSpec h3DCA{HistType::kTH3F , {axisDCAx, axisDCAx, axisTrackType}};
104110 HistogramConfigSpec hTHnCh{HistType::kTHnSparseF , {axisCent, axisNch, axisPt, axisEta, axisSign}, 5 };
105111 HistogramConfigSpec h3MultNchNmu{HistType::kTH3F , {axisCent, axisNch, axisNmu}};
@@ -119,7 +125,7 @@ struct HfTaskSingleMuonMult {
119125 registry.add (" h3DCABeforeAccCuts" , " " , h3DCA);
120126 registry.add (" hMuDeltaPtBeforeAccCuts" , " " , hTHnMuDeltaPt);
121127 registry.add (" hMuAfterEtaCuts" , " " , hTHnMu);
122- registry.add (" hMuAfterRabsCuts " , " " , hTHnMu);
128+ registry.add (" hMuAfterRabsorbCuts " , " " , hTHnMu);
123129 registry.add (" hMuAfterPdcaCuts" , " " , hTHnMu);
124130 registry.add (" hMuAfterAccCuts" , " " , hTHnMu);
125131 registry.add (" h3DCAAfterAccCuts" , " " , h3DCA);
@@ -138,7 +144,7 @@ struct HfTaskSingleMuonMult {
138144 auto * xMu = hMustat->GetXaxis ();
139145 xMu->SetBinLabel (1 , " noCut" );
140146 xMu->SetBinLabel (2 , " etaCut" );
141- xMu->SetBinLabel (3 , " RabsCut " );
147+ xMu->SetBinLabel (3 , " RabsorbCut " );
142148 xMu->SetBinLabel (4 , " pDcaCut" );
143149 xMu->SetBinLabel (5 , " chi2Cut" );
144150
@@ -148,8 +154,9 @@ struct HfTaskSingleMuonMult {
148154 }
149155 }
150156
151- template <typename TCollision, typename TTracks, typename TMuons>
152- void runMuonSel (TCollision const & collision, TTracks const & tracks, TMuons const & muons)
157+ void process (MyCollisions::iterator const & collision,
158+ MyTracks const & tracks,
159+ MyMuons const & muons)
153160 {
154161 registry.fill (HIST (" hEvent" ), 1 );
155162
@@ -158,9 +165,8 @@ struct HfTaskSingleMuonMult {
158165 }
159166 registry.fill (HIST (" hEvent" ), 2 );
160167 registry.fill (HIST (" hVtxZBeforeSel" ), collision.posZ ());
161- LOGP (debug, " SAMSUL_{} collisions" , collision.globalIndex ());
162168
163- if (std::abs (collision.posZ ()) > zVtx ) {
169+ if (std::abs (collision.posZ ()) > zVtxMax ) {
164170 return ;
165171 }
166172 registry.fill (HIST (" hEvent" ), 3 );
@@ -173,14 +179,10 @@ struct HfTaskSingleMuonMult {
173179 int nMu{0 };
174180 constexpr std::size_t nTypes{5 };
175181 int nMuTrackType[nTypes] = {0 };
176- constexpr float etaCh{0.8 };
177- constexpr float pTMinCh{0.15 };
178182
179183 std::vector<typename std::decay_t <decltype (tracks)>::iterator> chTracks;
180184 for (const auto & track : tracks) {
181- if (track.isGlobalTrack () && std::abs (track.eta ()) < etaCh && track.pt () > pTMinCh) {
182- chTracks.push_back (track);
183- }
185+ chTracks.push_back (track);
184186 }
185187 nCh = chTracks.size ();
186188 if (nCh < 1 ) {
@@ -195,22 +197,22 @@ struct HfTaskSingleMuonMult {
195197
196198 // muons
197199 for (const auto & muon : muons) {
198- const auto pt{muon.pt ()}, eta{muon.eta ()}, theta{90 .0f - ((std::atan (muon.tgl ())) * constants::math::Rad2Deg)}, pDca{muon.pDca ()}, rAbs {muon.rAtAbsorberEnd ()}, chi2{muon.chi2MatchMCHMFT ()};
199- const auto dcaXY ( RecoDecay::sqrtSumOfSquares (muon.fwdDcaX (), muon.fwdDcaY ())) ;
200- const auto muTrackType ( muon.trackType ()) ;
200+ const auto pt{muon.pt ()}, eta{muon.eta ()}, theta{90 .0f - ((std::atan (muon.tgl ())) * constants::math::Rad2Deg)}, pDca{muon.pDca ()}, rAbsorb {muon.rAtAbsorberEnd ()}, chi2{muon.chi2MatchMCHMFT ()};
201+ const auto dcaXY{ RecoDecay::sqrtSumOfSquares (muon.fwdDcaX (), muon.fwdDcaY ())} ;
202+ const auto muTrackType{ muon.trackType ()} ;
201203
202- registry.fill (HIST (" hMuBeforeMatchMFT" ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, muTrackType);
204+ registry.fill (HIST (" hMuBeforeMatchMFT" ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, muTrackType);
203205
204206 // histograms before the acceptance cuts
205207 registry.fill (HIST (" hMuTrkSel" ), 1 );
206- registry.fill (HIST (" hMuBeforeAccCuts" ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, muTrackType);
208+ registry.fill (HIST (" hMuBeforeAccCuts" ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, muTrackType);
207209 registry.fill (HIST (" h3DCABeforeAccCuts" ), muon.fwdDcaX (), muon.fwdDcaY (), muTrackType);
208210
209211 if (muon.has_matchMCHTrack ()) {
210212 auto muonType3 = muon.template matchMCHTrack_as <MyMuons>();
211- auto dpt ( muonType3.pt () - pt) ;
213+ auto dpt = muonType3.pt () - pt;
212214 if (muTrackType == ForwardTrackTypeEnum::GlobalMuonTrack) {
213- registry.fill (HIST (" hMuDeltaPtBeforeAccCuts" ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, dpt);
215+ registry.fill (HIST (" hMuDeltaPtBeforeAccCuts" ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, dpt);
214216 }
215217 }
216218
@@ -220,42 +222,42 @@ struct HfTaskSingleMuonMult {
220222 continue ;
221223 }
222224 registry.fill (HIST (" hMuTrkSel" ), 2 );
223- registry.fill (HIST (" hMuAfterEtaCuts" ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, muTrackType);
225+ registry.fill (HIST (" hMuAfterEtaCuts" ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, muTrackType);
224226
225- // Rabs cuts
226- if ((rAbs < rAbsMin ) || (rAbs >= rAbsMax )) {
227+ // Rabsorb cuts
228+ if ((rAbsorb < rAbsorbMin ) || (rAbsorb >= rAbsorbMax )) {
227229 continue ;
228230 }
229231 registry.fill (HIST (" hMuTrkSel" ), 3 );
230- registry.fill (HIST (" hMuAfterRabsCuts " ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, muTrackType);
232+ registry.fill (HIST (" hMuAfterRabsorbCuts " ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, muTrackType);
231233
232- if ((rAbs < rAbsMid ) && (pDca >= pDcaMin)) {
234+ if ((rAbsorb < rAbsorbMid ) && (pDca >= pDcaMin)) {
233235 continue ;
234236 }
235- if ((rAbs >= rAbsMid ) && (pDca >= pDcaMax)) {
237+ if ((rAbsorb >= rAbsorbMid ) && (pDca >= pDcaMax)) {
236238 continue ;
237239 }
238240 registry.fill (HIST (" hMuTrkSel" ), 4 );
239- registry.fill (HIST (" hMuAfterPdcaCuts" ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, muTrackType);
241+ registry.fill (HIST (" hMuAfterPdcaCuts" ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, muTrackType);
240242
241243 // MCH-MFT matching chi2
242- if (( muon.chi2 () >= 1e6 ) || (muon. chi2 () < 0 ) ) {
244+ if (muon.chi2 () >= 1e6 ) {
243245 continue ;
244246 }
245247 registry.fill (HIST (" hMuTrkSel" ), 5 );
246248
247249 // histograms after acceptance cuts
248- registry.fill (HIST (" hMuAfterAccCuts" ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, muTrackType);
250+ registry.fill (HIST (" hMuAfterAccCuts" ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, muTrackType);
249251 registry.fill (HIST (" h3DCAAfterAccCuts" ), muon.fwdDcaX (), muon.fwdDcaY (), muTrackType);
250252 nMu++;
251253 nMuTrackType[muTrackType]++;
252254
253255 if (muon.has_matchMCHTrack ()) {
254256 auto muonType3 = muon.template matchMCHTrack_as <MyMuons>();
255- auto dpt ( muonType3.pt () - pt) ;
257+ auto dpt = muonType3.pt () - pt;
256258
257259 if (muTrackType == ForwardTrackTypeEnum::GlobalMuonTrack) {
258- registry.fill (HIST (" hMuDeltaPtAfterAccCuts" ), cent, nCh, pt, eta, theta, rAbs , dcaXY, pDca, chi2, dpt);
260+ registry.fill (HIST (" hMuDeltaPtAfterAccCuts" ), cent, nCh, pt, eta, theta, rAbsorb , dcaXY, pDca, chi2, dpt);
259261 }
260262 }
261263 }
@@ -270,13 +272,6 @@ struct HfTaskSingleMuonMult {
270272 });
271273 chTracks.clear ();
272274 }
273-
274- void process (MyCollisions::iterator const & collision,
275- MyTracks const & tracks,
276- MyMuons const & muons)
277- {
278- runMuonSel (collision, tracks, muons);
279- }
280275};
281276
282277WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments