1616
1717#include " ALICE3/DataModel/OTFRICH.h"
1818#include " ALICE3/DataModel/OTFTOF.h"
19+ #include " ALICE3/DataModel/OTFCollision.h"
1920#include " ALICE3/DataModel/tracksAlice3.h"
2021#include " Common/DataModel/TrackSelectionTables.h"
2122
2526#include < Framework/AnalysisTask.h>
2627#include < Framework/HistogramRegistry.h>
2728#include < Framework/runDataProcessing.h>
29+ #include < Framework/O2DatabasePDGPlugin.h>
2830
2931#include < Math/Vector4D.h>
3032
33+
3134#include < vector>
3235
3336using namespace o2 ;
@@ -54,6 +57,8 @@ struct Alice3Dilepton {
5457 SliceCache cache_mc;
5558 SliceCache cache_rec;
5659
60+ Service<o2::framework::O2DatabasePDG> inspdg;
61+
5762 Configurable<int > pdg{" pdg" , 11 , " pdg code for analysis. dielectron:11, dimuon:13" };
5863 Configurable<bool > requireHFEid{" requireHFEid" , true , " Require HFE identification for both leptons" };
5964 Configurable<float > ptMin{" pt-min" , 0 .f , " Lower limit in pT" };
@@ -68,6 +73,7 @@ struct Alice3Dilepton {
6873 Configurable<float > nSigmaPionCutInnerTOF{" nSigmaPionCutInnerTOF" , 3 ., " Pion exclusion in inner TOF" };
6974 Configurable<float > nSigmaElectronRich{" nSigmaElectronRich" , 3 ., " Electron inclusion RICH" };
7075 Configurable<float > nSigmaPionRich{" nSigmaPionRich" , 3 ., " Pion exclusion RICH" };
76+ Configurable<int > otfConfig{" otfConfig" , 0 , " OTF configuration flag" };
7177
7278 HistogramRegistry registry{" Histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
7379
@@ -100,6 +106,7 @@ struct Alice3Dilepton {
100106 registry.add (" Generated/Particle/prodVy" , " Particle Prod. Vertex Y" , kTH1F , {axisPrody});
101107 registry.add (" Generated/Particle/prodVz" , " Particle Prod. Vertex Z" , kTH1F , {axisProdz});
102108 registry.add (" Generated/Particle/ParticlesPerEvent" , " Particles per event" , kTH1F , {{100 , 0 , 100 }});
109+ registry.add (" Generated/Particle/ParticlesFit" , " Charged Particles in Fit acceptance per event" , kTH1F , {{15000 ,0 ,15000 }});
103110
104111 registry.add (" Generated/Pair/ULS/Tried" , " Pair tries" , kTH1F , {{10 , -0.5 , 9.5 }});
105112 registry.add (" Generated/Pair/ULS/Mass" , " Pair Mass" , kTH1F , {axisM});
@@ -601,7 +608,19 @@ struct Alice3Dilepton {
601608
602609 auto mcParticles_per_coll = mcParticles.sliceBy (perMCCollision, mccollision.globalIndex ());
603610 int nParticlesInEvent = 0 ;
611+ int nParticlesFIT=0 ;
604612 for (const auto & mcParticle : mcParticles_per_coll) {
613+ if (mcParticle.isPhysicalPrimary ()) {
614+ if ((2.2 <mcParticle.eta ()&&mcParticle.eta ()< 5.0 ) || (-3.4 <mcParticle.eta ()&&mcParticle.eta ()<-2.3 )) {
615+ auto pdgParticle = inspdg->GetParticle (mcParticle.pdgCode ());
616+ if (pdgParticle) {
617+ float charge = pdgParticle->Charge () / 3 .f ; // Charge in units of |e|
618+ if (std::abs (charge) >= 1 .) {
619+ nParticlesFIT++;
620+ }
621+ }
622+ }
623+ }
605624 if (std::abs (mcParticle.pdgCode ()) != pdg) {
606625 continue ;
607626 }
@@ -624,6 +643,7 @@ struct Alice3Dilepton {
624643
625644 } // end of mc particle loop
626645 registry.fill (HIST (" Generated/Particle/ParticlesPerEvent" ), nParticlesInEvent);
646+ registry.fill (HIST (" Generated/Particle/ParticlesFIT" ), nParticlesFIT);
627647
628648 auto neg_mcParticles_coll = neg_mcParticles->sliceByCached (o2::aod::mcparticle::mcCollisionId, mccollision.globalIndex (), cache_mc);
629649 auto pos_mcParticles_coll = pos_mcParticles->sliceByCached (o2::aod::mcparticle::mcCollisionId, mccollision.globalIndex (), cache_mc);
@@ -636,18 +656,22 @@ struct Alice3Dilepton {
636656 } // end of processGen
637657
638658 using MyTracksMC = soa::Join<aod::Tracks, aod::TracksCov, aod::TracksDCA, aod::McTrackLabels, aod::UpgradeTofs, aod::UpgradeTofMCs, aod::UpgradeRichs, aod::TracksAlice3>;
659+ using Alice3Collision = soa::Join<aod::Collisions, aod::OTFLUTConfigId>;
660+
639661 // Filter trackFilter = etaMin < o2::aod::track::eta &&
640662 // o2::aod::track::eta < etaMax &&
641663 // ptMin < o2::aod::track::pt &&
642664 // o2::aod::track::pt < ptMax &&
643665 // o2::aod::track_alice3::isReconstructed == selectReconstructed;
644666 Filter trackFilter = o2::aod::track_alice3::isReconstructed == selectReconstructed;
645667 using MyFilteredTracksMC = soa::Filtered<MyTracksMC>;
668+ Filter configFilter = (aod::upgrade_collision::lutConfigId == otfConfig);
669+ using MyFilteredAlice3Collision = soa::Filtered<Alice3Collision>;
646670 Preslice<MyFilteredTracksMC> perCollision = aod::track::collisionId;
647671 Partition<MyFilteredTracksMC> posTracks = o2::aod::track::signed1Pt > 0 .f;
648672 Partition<MyFilteredTracksMC> negTracks = o2::aod::track::signed1Pt < 0 .f;
649673
650- void processRec (const o2::aod::Collisions & collisions,
674+ void processRec (MyFilteredAlice3Collision const & collisions,
651675 MyFilteredTracksMC const & tracks,
652676 const o2::aod::McCollisions&,
653677 const aod::McParticles& mcParticles)
0 commit comments