1414// / \author s.scheid@cern.ch, daiki.sekihata@cern.ch
1515// /
1616
17+ #include " ALICE3/DataModel/OTFCollision.h"
1718#include " ALICE3/DataModel/OTFRICH.h"
1819#include " ALICE3/DataModel/OTFTOF.h"
1920#include " ALICE3/DataModel/tracksAlice3.h"
2425#include < Framework/AnalysisDataModel.h>
2526#include < Framework/AnalysisTask.h>
2627#include < Framework/HistogramRegistry.h>
28+ #include < Framework/O2DatabasePDGPlugin.h>
2729#include < Framework/runDataProcessing.h>
2830
2931#include < Math/Vector4D.h>
@@ -54,6 +56,8 @@ struct Alice3Dilepton {
5456 SliceCache cache_mc;
5557 SliceCache cache_rec;
5658
59+ Service<o2::framework::O2DatabasePDG> inspdg;
60+
5761 Configurable<int > pdg{" pdg" , 11 , " pdg code for analysis. dielectron:11, dimuon:13" };
5862 Configurable<bool > requireHFEid{" requireHFEid" , true , " Require HFE identification for both leptons" };
5963 Configurable<float > ptMin{" pt-min" , 0 .f , " Lower limit in pT" };
@@ -68,6 +72,7 @@ struct Alice3Dilepton {
6872 Configurable<float > nSigmaPionCutInnerTOF{" nSigmaPionCutInnerTOF" , 3 ., " Pion exclusion in inner TOF" };
6973 Configurable<float > nSigmaElectronRich{" nSigmaElectronRich" , 3 ., " Electron inclusion RICH" };
7074 Configurable<float > nSigmaPionRich{" nSigmaPionRich" , 3 ., " Pion exclusion RICH" };
75+ Configurable<int > otfConfig{" otfConfig" , 0 , " OTF configuration flag" };
7176
7277 HistogramRegistry registry{" Histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
7378
@@ -100,6 +105,7 @@ struct Alice3Dilepton {
100105 registry.add (" Generated/Particle/prodVy" , " Particle Prod. Vertex Y" , kTH1F , {axisPrody});
101106 registry.add (" Generated/Particle/prodVz" , " Particle Prod. Vertex Z" , kTH1F , {axisProdz});
102107 registry.add (" Generated/Particle/ParticlesPerEvent" , " Particles per event" , kTH1F , {{100 , 0 , 100 }});
108+ registry.add (" Generated/Particle/ParticlesFit" , " Charged Particles in Fit acceptance per event" , kTH1F , {{15000 , 0 , 15000 }});
103109
104110 registry.add (" Generated/Pair/ULS/Tried" , " Pair tries" , kTH1F , {{10 , -0.5 , 9.5 }});
105111 registry.add (" Generated/Pair/ULS/Mass" , " Pair Mass" , kTH1F , {axisM});
@@ -601,7 +607,19 @@ struct Alice3Dilepton {
601607
602608 auto mcParticles_per_coll = mcParticles.sliceBy (perMCCollision, mccollision.globalIndex ());
603609 int nParticlesInEvent = 0 ;
610+ int nParticlesFIT = 0 ;
604611 for (const auto & mcParticle : mcParticles_per_coll) {
612+ if (mcParticle.isPhysicalPrimary ()) {
613+ if ((2.2 < mcParticle.eta () && mcParticle.eta () < 5.0 ) || (-3.4 < mcParticle.eta () && mcParticle.eta () < -2.3 )) {
614+ auto pdgParticle = inspdg->GetParticle (mcParticle.pdgCode ());
615+ if (pdgParticle) {
616+ float charge = pdgParticle->Charge () / 3 .f ; // Charge in units of |e|
617+ if (std::abs (charge) >= 1 .) {
618+ nParticlesFIT++;
619+ }
620+ }
621+ }
622+ }
605623 if (std::abs (mcParticle.pdgCode ()) != pdg) {
606624 continue ;
607625 }
@@ -624,6 +642,7 @@ struct Alice3Dilepton {
624642
625643 } // end of mc particle loop
626644 registry.fill (HIST (" Generated/Particle/ParticlesPerEvent" ), nParticlesInEvent);
645+ registry.fill (HIST (" Generated/Particle/ParticlesFIT" ), nParticlesFIT);
627646
628647 auto neg_mcParticles_coll = neg_mcParticles->sliceByCached (o2::aod::mcparticle::mcCollisionId, mccollision.globalIndex (), cache_mc);
629648 auto pos_mcParticles_coll = pos_mcParticles->sliceByCached (o2::aod::mcparticle::mcCollisionId, mccollision.globalIndex (), cache_mc);
@@ -636,18 +655,22 @@ struct Alice3Dilepton {
636655 } // end of processGen
637656
638657 using MyTracksMC = soa::Join<aod::Tracks, aod::TracksCov, aod::TracksDCA, aod::McTrackLabels, aod::UpgradeTofs, aod::UpgradeTofMCs, aod::UpgradeRichs, aod::TracksAlice3>;
658+ using Alice3Collision = soa::Join<aod::Collisions, aod::OTFLUTConfigId>;
659+
639660 // Filter trackFilter = etaMin < o2::aod::track::eta &&
640661 // o2::aod::track::eta < etaMax &&
641662 // ptMin < o2::aod::track::pt &&
642663 // o2::aod::track::pt < ptMax &&
643664 // o2::aod::track_alice3::isReconstructed == selectReconstructed;
644665 Filter trackFilter = o2::aod::track_alice3::isReconstructed == selectReconstructed;
645666 using MyFilteredTracksMC = soa::Filtered<MyTracksMC>;
667+ Filter configFilter = (aod::upgrade_collision::lutConfigId == otfConfig);
668+ using MyFilteredAlice3Collision = soa::Filtered<Alice3Collision>;
646669 Preslice<MyFilteredTracksMC> perCollision = aod::track::collisionId;
647670 Partition<MyFilteredTracksMC> posTracks = o2::aod::track::signed1Pt > 0 .f;
648671 Partition<MyFilteredTracksMC> negTracks = o2::aod::track::signed1Pt < 0 .f;
649672
650- void processRec (const o2::aod::Collisions & collisions,
673+ void processRec (MyFilteredAlice3Collision const & collisions,
651674 MyFilteredTracksMC const & tracks,
652675 const o2::aod::McCollisions&,
653676 const aod::McParticles& mcParticles)
0 commit comments