@@ -102,8 +102,10 @@ struct JFlucEfficiencyTask {
102102
103103 Configurable<int > cfgCentBinsForMC{" cfgCentBinsForMC" , 1 , " Centrality bins for MC, 0: off, 1: on" };
104104 using CollisionCandidates = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::CentFT0As>;
105+ using CollisionRun2Candidates = soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>;
105106 using TrackCandidates = soa::Join<aod::FullTracks, aod::TracksExtra, aod::TrackSelection>;
106107 using MCCollisionCandidates = soa::Join<CollisionCandidates, aod::McCollisionLabel>;
108+ using MCRun2CollisionCandidates = soa::Join<CollisionRun2Candidates, aod::McCollisionLabel>;
107109 using MCTrackCandidates = soa::Join<TrackCandidates, aod::McTrackLabel>;
108110
109111 // Histogram Registry
@@ -325,6 +327,78 @@ struct JFlucEfficiencyTask {
325327 }
326328 }
327329
330+ void processMCRun2 (aod::McCollisions::iterator const & mcCollision,
331+ soa::SmallGroups<MCRun2CollisionCandidates> const & collisions,
332+ soa::Filtered<MCTrackCandidates> const & mcTracks,
333+ aod::McParticles const & mcParticles)
334+ {
335+ registry.fill (HIST (" hEventCounterMC" ), 0 );
336+ if (!(std::abs (mcCollision.posZ ()) < cfgCutVertex)) {
337+ return ;
338+ }
339+ if (collisions.size () < 1 ) {
340+ return ;
341+ }
342+ if (cfgAcceptSplitCollisions == 0 && collisions.size () > 1 ) {
343+ return ;
344+ }
345+ float centrality = -999 ;
346+ for (const auto & collision : collisions) { // Anayway only 1 collision per mcCollision will be selected
347+ if (!colCuts.isSelected (collision)) // Default event selection
348+ return ;
349+ colCuts.fillQARun2 (collision);
350+ centrality = collision.centRun2V0M ();
351+ }
352+ registry.fill (HIST (" hEventCounterMC" ), 1 );
353+ registry.fill (HIST (" hZVertexMC" ), mcCollision.posZ (), centrality);
354+ if (centrality < cfgCentMin || centrality > cfgCentMax) {
355+ return ;
356+ }
357+ for (const auto & particle : mcParticles) {
358+ auto charge = getCharge (particle);
359+ if ((!particle.isPhysicalPrimary ()) || !isChargedParticle (particle.pdgCode ())) {
360+ continue ;
361+ }
362+ // pT and eta selections
363+ if (particle.pt () < cfgPtMin || particle.pt () > cfgPtMax || particle.eta () < cfgEtaMin || particle.eta () > cfgEtaMax) {
364+ continue ;
365+ }
366+ registry.fill (HIST (" hPtGen" ), particle.pt (), centrality);
367+ registry.fill (HIST (" hEtaGen" ), particle.eta (), centrality);
368+ if (charge > 0 ) { // Positive particles
369+ registry.fill (HIST (" hPtGenPos" ), particle.pt (), centrality);
370+ } else if (charge < 0 ) { // Negative particles
371+ registry.fill (HIST (" hPtGenNeg" ), particle.pt (), centrality);
372+ }
373+ }
374+ // Reconstruct tracks from MC particles
375+ for (const auto & collision : collisions) {
376+ registry.fill (HIST (" hZVertexReco" ), collision.posZ (), centrality);
377+ registry.fill (HIST (" hZVertexCorrelation" ), mcCollision.posZ (), collision.posZ ());
378+ auto tracks = mcTracks.sliceBy (perCollision, collision.globalIndex ());
379+ for (const auto & track : tracks) {
380+ if (!track.has_mcParticle ()) {
381+ continue ;
382+ }
383+ auto mcPart = track.mcParticle ();
384+ if (!mcPart.isPhysicalPrimary () || !isChargedParticle (mcPart.pdgCode ())) {
385+ continue ;
386+ }
387+ // pT and eta selections
388+ if (track.pt () < cfgPtMin || track.pt () > cfgPtMax || track.eta () < cfgEtaMin || track.eta () > cfgEtaMax) {
389+ continue ;
390+ }
391+ registry.fill (HIST (" hPtRec" ), track.pt (), centrality);
392+ registry.fill (HIST (" hEtaRec" ), track.eta (), centrality);
393+ if (track.sign () > 0 ) { // Positive tracks
394+ registry.fill (HIST (" hPtRecPos" ), track.pt (), centrality);
395+ } else if (track.sign () < 0 ) { // Negative tracks
396+ registry.fill (HIST (" hPtRecNeg" ), track.pt (), centrality);
397+ }
398+ }
399+ }
400+ }
401+
328402 void processData (CollisionCandidates::iterator const & collision, soa::Filtered<TrackCandidates> const & tracks)
329403 {
330404 if (!colCuts.isSelected (collision)) // Default event selection
@@ -350,6 +424,31 @@ struct JFlucEfficiencyTask {
350424 }
351425 }
352426
427+ void processDataRun2 (CollisionRun2Candidates::iterator const & collision, soa::Filtered<TrackCandidates> const & tracks)
428+ {
429+ if (!colCuts.isSelected (collision)) // Default event selection
430+ return ;
431+ colCuts.fillQARun2 (collision);
432+ auto centrality = collision.centRun2V0M ();
433+ if (centrality < cfgCentMin || centrality > cfgCentMax) {
434+ return ;
435+ }
436+ registry.fill (HIST (" hZVertexReco" ), collision.posZ (), centrality);
437+ for (const auto & track : tracks) {
438+ // pT and eta selections
439+ if (track.pt () < cfgPtMin || track.pt () > cfgPtMax || track.eta () < cfgEtaMin || track.eta () > cfgEtaMax) {
440+ continue ;
441+ }
442+ registry.fill (HIST (" hPtRec" ), track.pt (), centrality);
443+ registry.fill (HIST (" hEtaRec" ), track.eta (), centrality);
444+ if (track.sign () > 0 ) { // Positive tracks
445+ registry.fill (HIST (" hPtRecPos" ), track.pt (), centrality);
446+ } else if (track.sign () < 0 ) { // Negative tracks
447+ registry.fill (HIST (" hPtRecNeg" ), track.pt (), centrality);
448+ }
449+ }
450+ }
451+
353452 // NOTE SmallGroups includes soa::Filtered always
354453 Preslice<aod::CFTracksWithLabel> perCFCollision = aod::cftrack::cfCollisionId;
355454 void processEfficiency (soa::Filtered<aod::CFMcCollisions>::iterator const & mcCollision,
@@ -455,7 +554,9 @@ struct JFlucEfficiencyTask {
455554 }
456555
457556 PROCESS_SWITCH (JFlucEfficiencyTask, processMC, " Process MC only" , false );
557+ PROCESS_SWITCH (JFlucEfficiencyTask, processMCRun2, " Process Run2 MC only" , false );
458558 PROCESS_SWITCH (JFlucEfficiencyTask, processData, " Process data only" , false );
559+ PROCESS_SWITCH (JFlucEfficiencyTask, processDataRun2, " Process Run2 data only" , false );
459560 PROCESS_SWITCH (JFlucEfficiencyTask, processDerivedMC, " Process derived MC only" , false );
460561 PROCESS_SWITCH (JFlucEfficiencyTask, processDerivedData, " Process derived data only" , false );
461562 PROCESS_SWITCH (JFlucEfficiencyTask, processEfficiency, " Process efficiency task" , true );
0 commit comments