@@ -1298,6 +1298,7 @@ struct AnalysisSameEventPairing {
12981298 Produces<aod::DileptonsInfo> dileptonInfoList;
12991299 Produces<aod::JPsieeCandidates> PromptNonPromptSepTable;
13001300 Produces<aod::DileptonPolarization> dileptonPolarList;
1301+ Produces<aod::DileptonsEventInfo> dileptonEventInfoList;
13011302
13021303 o2::base::MatLayerCylSet* fLUT = nullptr ;
13031304 int fCurrentRun ; // needed to detect if the run changed and trigger update of calibrations etc.
@@ -1403,7 +1404,7 @@ struct AnalysisSameEventPairing {
14031404
14041405 void init (o2::framework::InitContext& context)
14051406 {
1406- fEnableBarrelHistos = context.mOptions .get <bool >(" processAllSkimmed" ) || context.mOptions .get <bool >(" processBarrelOnlySkimmed" ) || context.mOptions .get <bool >(" processBarrelOnlyWithCollSkimmed" ) || context.mOptions .get <bool >(" processBarrelOnlySkimmedNoCov" ) || context.mOptions .get <bool >(" processBarrelOnlySkimmedNoCovWithMultExtra" ) || context.mOptions .get <bool >(" processBarrelOnlyWithQvectorCentrSkimmedNoCov" );
1407+ fEnableBarrelHistos = context.mOptions .get <bool >(" processAllSkimmed" ) || context.mOptions .get <bool >(" processBarrelOnlySkimmed" ) || context.mOptions .get <bool >(" processBarrelOnlyWithCollSkimmed" ) || context.mOptions .get <bool >(" processBarrelOnlySkimmedNoCov" ) || context.mOptions .get <bool >(" processBarrelOnlySkimmedNoCovWithMultExtra" ) || context.mOptions .get <bool >(" processBarrelOnlyWithQvectorCentrSkimmedNoCov" ) || context. mOptions . get < bool >( " processBarrelOnlyWithQvectorCentrSkimmed " ) ;
14071408 fEnableBarrelMixingHistos = context.mOptions .get <bool >(" processMixingAllSkimmed" ) || context.mOptions .get <bool >(" processMixingBarrelSkimmed" ) || context.mOptions .get <bool >(" processMixingBarrelSkimmedFlow" ) || context.mOptions .get <bool >(" processMixingBarrelWithQvectorCentrSkimmedNoCov" );
14081409 fEnableBarrelMixingHistos |= fConfigRunMixingAcrossTFs ;
14091410 fEnableMuonHistos = context.mOptions .get <bool >(" processAllSkimmed" ) || context.mOptions .get <bool >(" processMuonOnlySkimmed" ) || context.mOptions .get <bool >(" processMuonOnlySkimmedMultExtra" ) || context.mOptions .get <bool >(" processMuonOnlySkimmedFlow" );
@@ -1838,21 +1839,43 @@ struct AnalysisSameEventPairing {
18381839 // Reserve capacity for the output tables to avoid repeated reallocations
18391840 // inside the Arrow builders. Unused capacity is virtual address space
18401841 // only — pages are not faulted in until written.
1841- auto nAssocs = assocs.size ();
1842- dielectronList.reserve (nAssocs);
1843- dimuonList.reserve (nAssocs);
1844- dielectronsExtraList.reserve (nAssocs);
1845- dielectronInfoList.reserve (nAssocs);
1846- dimuonsExtraList.reserve (nAssocs);
1847- dileptonInfoList.reserve (nAssocs);
1848- dileptonFlowList.reserve (nAssocs);
1842+ // estimate reserved size
1843+ int64_t reserveSize = 0 ;
1844+ for (auto & event : events) {
1845+ if (event.isEventSelected_bit (0 )) {
1846+ auto groupedAssocs = assocs.sliceBy (preslice, event.globalIndex ());
1847+ size_t nGood = 0 ;
1848+ for (auto const & t : groupedAssocs) {
1849+ if constexpr (TPairType == VarManager::kDecayToEE ) {
1850+ if (t.isBarrelSelected_raw ()) {
1851+ nGood++;
1852+ }
1853+ } else if constexpr (TPairType == VarManager::kDecayToMuMu ) {
1854+ if (t.isMuonSelected_raw ()) {
1855+ nGood++;
1856+ }
1857+ }
1858+ }
1859+ reserveSize += nGood * (nGood - 1 ) / 2 ;
1860+ }
1861+ }
1862+
1863+ dielectronList.reserve (reserveSize);
1864+ dimuonList.reserve (reserveSize);
1865+ dielectronsExtraList.reserve (reserveSize);
1866+ dielectronInfoList.reserve (reserveSize);
1867+ dimuonsExtraList.reserve (reserveSize);
1868+ dileptonInfoList.reserve (reserveSize);
1869+ dileptonFlowList.reserve (reserveSize);
18491870 if (fConfigOptions .flatTables .value ) {
1850- dielectronAllList.reserve (nAssocs );
1851- dimuonAllList.reserve (nAssocs );
1871+ dielectronAllList.reserve (reserveSize );
1872+ dimuonAllList.reserve (reserveSize );
18521873 }
18531874 if (fConfigOptions .polarTables .value ) {
1854- dileptonPolarList.reserve (nAssocs);
1875+ dileptonPolarList.reserve (reserveSize);
1876+ dileptonEventInfoList.reserve (reserveSize);
18551877 }
1878+
18561879 fAmbiguousPairs .clear ();
18571880 constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0 );
18581881 constexpr bool eventHasQvectorCentr = ((TEventFillMap & VarManager::ObjTypes::CollisionQvect) > 0 );
@@ -1940,6 +1963,7 @@ struct AnalysisSameEventPairing {
19401963 VarManager::fgValues[VarManager::kCosThetaPP ], VarManager::fgValues[VarManager::kPhiPP ], VarManager::fgValues[VarManager::kPhiTildePP ],
19411964 VarManager::fgValues[VarManager::kCosThetaRM ],
19421965 VarManager::fgValues[VarManager::kCosThetaStarTPC ], VarManager::fgValues[VarManager::kCosThetaStarFT0A ], VarManager::fgValues[VarManager::kCosThetaStarFT0C ]);
1966+ dileptonEventInfoList (VarManager::fgValues[VarManager::kCentFT0C ], VarManager::fgValues[VarManager::kVtxZ ], VarManager::fgValues[VarManager::kVtxNcontrib ], VarManager::fgValues[VarManager::kRandomPsi2 ], VarManager::fgValues[VarManager::kPsi2A ], VarManager::fgValues[VarManager::kPsi2B ], VarManager::fgValues[VarManager::kPsi2C ]);
19431967 }
19441968 if constexpr (trackHasCov && TTwoProngFitter) {
19451969 dielectronsExtraList (t1.globalIndex (), t2.globalIndex (), VarManager::fgValues[VarManager::kVertexingTauzProjected ], VarManager::fgValues[VarManager::kVertexingLzProjected ], VarManager::fgValues[VarManager::kVertexingLxyProjected ]);
@@ -2837,6 +2861,13 @@ struct AnalysisSameEventPairing {
28372861 runSameEventPairing<false , VarManager::kDecayToEE , gkEventFillMapWithQvectorCentr, gkTrackFillMap>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks);
28382862 }
28392863
2864+ void processBarrelOnlyWithQvectorCentrSkimmed (MyEventsQvectorCentrSelected const & events,
2865+ soa::Join<aod::ReducedTracksAssoc, aod::BarrelTrackCuts, aod::Prefilter> const & barrelAssocs,
2866+ MyBarrelTracksWithCovWithAmbiguities const & barrelTracks)
2867+ {
2868+ runSameEventPairing<true , VarManager::kDecayToEE , gkEventFillMapWithQvectorCentr, gkTrackFillMapWithCov>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks);
2869+ }
2870+
28402871 void processMuonOnlySkimmed (MyEventsVtxCovSelected const & events,
28412872 soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const & muonAssocs, MyMuonTracksWithCovWithAmbiguities const & muons)
28422873 {
@@ -2918,6 +2949,7 @@ struct AnalysisSameEventPairing {
29182949 PROCESS_SWITCH (AnalysisSameEventPairing, processBarrelOnlySkimmedNoCov, " Run barrel only pairing (no covariances), with skimmed tracks and with collision information" , false );
29192950 PROCESS_SWITCH (AnalysisSameEventPairing, processBarrelOnlySkimmedNoCovWithMultExtra, " Run barrel only pairing (no covariances), with skimmed tracks, with collision information, with MultsExtra" , false );
29202951 PROCESS_SWITCH (AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmedNoCov, " Run barrel only pairing (no covariances), with skimmed tracks, with Qvector from central framework" , false );
2952+ PROCESS_SWITCH (AnalysisSameEventPairing, processBarrelOnlyWithQvectorCentrSkimmed, " Run barrel only pairing (no covariances), with skimmed tracks, with collision information, with Qvector from central framework" , false );
29212953 PROCESS_SWITCH (AnalysisSameEventPairing, processBarrelOnlySkimmedFlow, " Run barrel only pairing, with skimmed tracks and with flow" , false );
29222954 PROCESS_SWITCH (AnalysisSameEventPairing, processMuonOnlySkimmed, " Run muon only pairing, with skimmed tracks" , false );
29232955 PROCESS_SWITCH (AnalysisSameEventPairing, processMuonOnlySkimmedMultExtra, " Run muon only pairing, with skimmed tracks" , false );
0 commit comments