@@ -57,14 +57,6 @@ using ColMCRecTable = soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Co
5757using TrackMCRecTable = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>;
5858using FilTrackMCRecTable = soa::Filtered<TrackMCRecTable>;
5959
60- enum {
61- kTrackTypebegin = 0 ,
62- kGlobalplusITS = 1 ,
63- kGlobalonly ,
64- kITSonly ,
65- kTrackTypeend
66- };
67-
6860enum {
6961 kGenpTbegin = 0 ,
7062 kNoGenpTVar = 1 ,
@@ -89,7 +81,6 @@ AxisSpec axisEvent{10, 0.5, 10.5, "#Event", "EventAxis"};
8981AxisSpec axisVtxZ{40 , -20 , 20 , " Vertex Z" , " VzAxis" };
9082AxisSpec axisEta{40 , -2 , 2 , " #eta" , " EtaAxis" };
9183AxisSpec axisPhi{629 , 0 , o2::constants::math::TwoPI, " #phi" };
92- AxisSpec axisTrackType = {kTrackTypeend - 1 , +kTrackTypebegin + 0.5 , +kTrackTypeend - 0.5 , " " , " TrackTypeAxis" };
9384AxisSpec axisGenPtVary = {kGenpTend - 1 , +kGenpTbegin + 0.5 , +kGenpTend - 0.5 , " " , " GenpTVaryAxis" };
9485auto static constexpr kMinCharge = 3 .f;
9586auto static constexpr kMinpTcut = 0 .1f ;
@@ -114,5 +105,191 @@ struct StudyPnch {
114105 ConfigurableAxis ft0cMultHistBin{" ft0cMultHistBin" , {501 , -0.5 , 500.5 }, " " };
115106 ConfigurableAxis ptHistBin{" ptHistBin" , {200 , 0 ., 20 .}, " " };
116107
108+ Configurable<bool > isApplyTFcut{" isApplyTFcut" , true , " Enable TimeFrameBorder cut" };
109+ Configurable<bool > isApplyITSROcut{" isApplyITSROcut" , true , " Enable ITS ReadOutFrameBorder cut" };
117110 Configurable<bool > isApplySameBunchPileup{" isApplySameBunchPileup" , true , " Enable SameBunchPileup cut" };
118- };
111+ Configurable<bool > isApplyInelgt0{" isApplyInelgt0" , false , " Enable INEL > 0 condition" };
112+ Configurable<bool > isApplyExtraPhiCut{" isApplyExtraPhiCut" , false , " Enable extra phi cut" };
113+
114+ void init (InitContext const &)
115+ {
116+ AxisSpec axisMult = {multHistBin, " Mult" , " MultAxis" };
117+ AxisSpec axisPV = {pvHistBin, " PV" , " PVAxis" };
118+ AxisSpec axisFv0aMult = {fv0aMultHistBin, " fv0a" , " FV0AMultAxis" };
119+ AxisSpec axisFt0aMult = {ft0aMultHistBin, " ft0a" , " FT0AMultAxis" };
120+ AxisSpec axisFt0cMult = {ft0cMultHistBin, " ft0c" , " FT0CMultAxis" };
121+ AxisSpec axisPt = {ptHistBin, " pT" , " pTAxis" };
122+
123+ histos.add (" EventHist" , " EventHist" , kTH1D , {axisEvent}, false );
124+ histos.add (" VtxZHist" , " VtxZHist" , kTH1D , {axisVtxZ}, false );
125+
126+ auto hstat = histos.get <TH1>(HIST (" EventHist" ));
127+ auto * x = hstat->GetXaxis ();
128+ x->SetBinLabel (1 , " All events" );
129+ x->SetBinLabel (2 , " kIsTriggerTVX" );
130+ x->SetBinLabel (3 , " kNoTimeFrameBorder" );
131+ x->SetBinLabel (4 , " kNoITSROFrameBorder" );
132+ x->SetBinLabel (5 , " kNoSameBunchPileup" ); // reject collisions in case of pileup with another collision in the same foundBC
133+ x->SetBinLabel (6 , " INEL > 0" );
134+ x->SetBinLabel (7 , " |vz| < 10" );
135+
136+ if (doprocessData || doprocessCorrelation || doprocessMonteCarlo) {
137+ histos.add (" PhiVsEtaHist" , " PhiVsEtaHist" , kTH2F , {axisPhi, axisEta}, false );
138+ }
139+ if (doprocessData) {
140+ histos.add (" hMultiplicityData" , " hMultiplicityData" , kTH1F , {axisMult}, true );
141+ }
142+ if (doprocessCorrelation) {
143+ histos.add (" GlobalMult_vs_FT0A" , " GlobalMult_vs_FT0A" , kTH2F , {axisMult, axisFt0aMult}, true );
144+ histos.add (" GlobalMult_vs_FT0C" , " GlobalMult_vs_FT0C" , kTH2F , {axisMult, axisFt0cMult}, true );
145+ histos.add (" GlobalMult_vs_FV0A" , " GlobalMult_vs_FV0A" , kTH2F , {axisMult, axisFv0aMult}, true );
146+ histos.add (" NPVtracks_vs_FT0C" , " NPVtracks_vs_FT0C" , kTH2F , {axisPV, axisFt0cMult}, true );
147+ histos.add (" NPVtracks_vs_GlobalMult" , " NPVtracks_vs_GlobalMult" , kTH2F , {axisPV, axisMult}, true );
148+ }
149+ if (doprocessMonteCarlo) {
150+ histos.add (" hMultiplicityMCrec" , " hMultiplicityMCrec" , kTH1F , {axisMult}, true );
151+ }
152+ if (doprocessEvtLossSigLossMC) {
153+ histos.add (" MCEventHist" , " MCEventHist" , kTH1F , {axisEvent}, false );
154+ auto hstat = histos.get <TH1>(HIST (" MCEventHist" ));
155+ auto * x = hstat->GetXaxis ();
156+ x->SetBinLabel (1 , " All MC events" );
157+ x->SetBinLabel (2 , " MC events with atleast one reco event" );
158+ }
159+ }
160+
161+ template <typename CheckCol>
162+ bool isEventSelected (CheckCol const & col)
163+ {
164+ histos.fill (HIST (" EventHist" ), 1 );
165+ if (!col.selection_bit (o2::aod::evsel::kIsTriggerTVX )) {
166+ return false ;
167+ }
168+ histos.fill (HIST (" EventHist" ), 2 );
169+ if (isApplyTFcut && !col.selection_bit (o2::aod::evsel::kNoTimeFrameBorder )) {
170+ return false ;
171+ }
172+ histos.fill (HIST (" EventHist" ), 3 );
173+ if (isApplyITSROcut && !col.selection_bit (o2::aod::evsel::kNoITSROFrameBorder )) {
174+ return false ;
175+ }
176+ histos.fill (HIST (" EventHist" ), 4 );
177+ if (isApplySameBunchPileup && !col.selection_bit (o2::aod::evsel::kNoSameBunchPileup )) {
178+ return false ;
179+ }
180+ histos.fill (HIST (" EventHist" ), 5 );
181+ if (isApplyInelgt0 && !col.isInelGt0 ()) {
182+ return false ;
183+ }
184+ histos.fill (HIST (" EventHist" ), 6 );
185+ if (std::abs (col.posZ ()) >= vtxRange) {
186+ return ;
187+ }
188+ histos.fill (HIST (" EventHist" ), 7 );
189+ histos.fill (HIST (" VtxZHist" ), col.posZ ());
190+ }
191+
192+ template <typename CheckTrack>
193+ bool isTrackSelected (CheckTrack const & track)
194+ {
195+ if (std::abs (track.eta ()) >= etaRange) {
196+ return false ;
197+ }
198+ if (isApplyExtraPhiCut && ((track.phi () > extraphicut1 && track.phi () < extraphicut2) || track.phi () <= extraphicut3 || track.phi () >= extraphicut4)) {
199+ return false ;
200+ }
201+ return true ;
202+ }
203+
204+ template <typename CheckGenTrack>
205+ bool isGenTrackSelected (CheckGenTrack const & track)
206+ {
207+ if (!track.isPhysicalPrimary ()) {
208+ return false ;
209+ }
210+ if (!track.producedByGenerator ()) {
211+ return false ;
212+ }
213+ auto pdgTrack = pdg->GetParticle (track.pdgCode ());
214+ if (pdgTrack == nullptr ) {
215+ return false ;
216+ }
217+ if (std::abs (pdgTrack->Charge ()) < kMinCharge ) {
218+ return false ;
219+ }
220+ if (std::abs (track.eta ()) >= etaRange) {
221+ return false ;
222+ }
223+ if (isApplyExtraPhiCut && ((track.phi () > extraphicut1 && track.phi () < extraphicut2) || track.phi () <= extraphicut3 || track.phi () >= extraphicut4)) {
224+ return false ;
225+ }
226+ return true ;
227+ }
228+
229+ template <typename countTrk>
230+ int countNTracks (countTrk const & tracks)
231+ {
232+ auto nTrk = 0 ;
233+ for (const auto & track : tracks) {
234+ if (!isTrackSelected (track)) {
235+ continue ;
236+ }
237+ histos.fill (HIST (" PhiVsEtaHist" ), track.phi (), track.eta ());
238+ nTrk++;
239+ }
240+ return nTrk;
241+ }
242+
243+ template <typename countTrk>
244+ int countGenTracks (countTrk const & tracks)
245+ {
246+ auto nTrk = 0 ;
247+ for (const auto & track : tracks) {
248+ if (!isTrackSelected (track)) {
249+ continue ;
250+ }
251+ histos.fill (HIST (" PhiVsEtaHist" ), track.phi (), track.eta ());
252+ nTrk++;
253+ }
254+ return nTrk;
255+ }
256+
257+ Filter fTrackSelectionITS = ncheckbit(aod::track::v001::detectorMap, (uint8_t )o2::aod::track::ITS) &&
258+ ncheckbit (aod::track::trackCutFlag, TrackSelectionIts);
259+ Filter fTrackSelectionTPC = ifnode(ncheckbit(aod::track::v001::detectorMap, (uint8_t )o2::aod::track::TPC),
260+ ncheckbit (aod::track::trackCutFlag, TrackSelectionTpc), true );
261+ Filter fTrackSelectionDCA = ifnode(dcaZ.node() > 0 .f, nabs(aod::track::dcaZ) <= dcaZ && ncheckbit(aod::track::trackCutFlag, TrackSelectionDcaxyOnly),
262+ ncheckbit (aod::track::trackCutFlag, TrackSelectionDca));
263+
264+ void processData (CollisionDataTable::iterator const & cols, FilTrackDataTable const & tracks)
265+ {
266+ if (!isEventSelected (cols)) {
267+ return ;
268+ }
269+ auto mult = countNTracks (tracks);
270+ histos.fill (HIST (" hMultiplicityData" ), mult);
271+ }
272+
273+ void processCorrelation (CollisionDataTable::iterator const & cols, FilTrackDataTable const & tracks)
274+ {
275+ if (!isEventSelected (cols)) {
276+ return ;
277+ }
278+ auto mult = countNTracks (tracks);
279+ histos.fill (HIST (" GlobalMult_vs_FT0A" ), nchTracks, cols.multFT0A ());
280+ histos.fill (HIST (" GlobalMult_vs_FT0C" ), nchTracks, cols.multFT0C ());
281+ histos.fill (HIST (" GlobalMult_vs_FV0A" ), nchTracks, cols.multFV0A ());
282+ histos.fill (HIST (" NPVtracks_vs_FT0C" ), cols.multNTracksPV (), cols.multFT0C ());
283+ histos.fill (HIST (" NPVtracks_vs_GlobalMult" ), cols.multNTracksPV (), nchTracks);
284+ }
285+
286+ void processMonteCarlo (CollisionMCTrueTable::iterator const &, CollisionMCRecTable const & RecCols, TrackMCTrueTable const & GenParticles, FilTrackMCRecTable const & RecTracks)
287+ {
288+ for (const auto & RecCol : RecCols) {
289+ if (!isEventSelected (RecCol)) {
290+ continue ;
291+ }
292+ auto recTracksPart = RecTracks.sliceBy (perCollision, RecCol.globalIndex ());
293+ auto mult = countNTracks (recTracksPart);
294+ histos.fill (HIST (" hMultiplicityMCrec" ), mult);
295+ }
0 commit comments