@@ -1199,6 +1199,8 @@ struct AnalysisSameEventPairing {
11991199 Produces<aod::DielectronsInfo> dielectronInfoList;
12001200 Produces<aod::DimuonsExtra> dimuonsExtraList;
12011201 Produces<aod::DimuonsAll> dimuonAllList;
1202+ Produces<aod::DileptonsMiniTreeGen> dileptonMiniTreeGen;
1203+ Produces<aod::DileptonsMiniTreeRec> dileptonMiniTreeRec;
12021204 Produces<aod::DileptonsInfo> dileptonInfoList;
12031205 Produces<aod::JPsieeCandidates> PromptNonPromptSepTable;
12041206
@@ -1247,6 +1249,12 @@ struct AnalysisSameEventPairing {
12471249 Configurable<bool > runMCGenPair{" cfgRunMCGenPair" , false , " Do pairing of true MC particles" };
12481250 } fConfigMC ;
12491251
1252+ struct : ConfigurableGroup {
1253+ Configurable<bool > fConfigMiniTree {" useMiniTree.cfgMiniTree" , false , " Produce a single flat table with minimal information for analysis" };
1254+ Configurable<float > fConfigMiniTreeMinMass {" useMiniTree.cfgMiniTreeMinMass" , 2 , " Min. mass cut for minitree" };
1255+ Configurable<float > fConfigMiniTreeMaxMass {" useMiniTree.cfgMiniTreeMaxMass" , 5 , " Max. mass cut for minitree" };
1256+ } useMiniTree;
1257+
12501258 // Track related options
12511259 Configurable<bool > fPropTrack {" cfgPropTrack" , true , " Propgate tracks to associated collision to recalculate DCA and momentum vector" };
12521260
@@ -1648,6 +1656,10 @@ struct AnalysisSameEventPairing {
16481656 if (fConfigOptions .flatTables .value ) {
16491657 dimuonAllList.reserve (1 );
16501658 }
1659+ if (useMiniTree.fConfigMiniTree ) {
1660+ dileptonMiniTreeGen.reserve (1 );
1661+ dileptonMiniTreeRec.reserve (1 );
1662+ }
16511663 constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0 );
16521664 constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0 );
16531665
@@ -1847,6 +1859,27 @@ struct AnalysisSameEventPairing {
18471859 if (mcDecision & (static_cast <uint32_t >(1 ) << isig)) {
18481860 PromptNonPromptSepTable (VarManager::fgValues[VarManager::kMass ], VarManager::fgValues[VarManager::kPt ], VarManager::fgValues[VarManager::kVertexingTauxyProjected ], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass ], VarManager::fgValues[VarManager::kVertexingTauzProjected ], isAmbiInBunch, isAmbiOutOfBunch, isCorrect_pair);
18491861 fHistMan ->FillHistClass (histNamesMC[icut * fRecMCSignals .size () + isig][0 ].Data (), VarManager::fgValues); // matched signal
1862+ if (useMiniTree.fConfigMiniTree ) {
1863+ if constexpr (TPairType == VarManager::kDecayToMuMu ) {
1864+ twoTrackFilter = a1.isMuonSelected_raw () & a2.isMuonSelected_raw () & fMuonFilterMask ;
1865+ if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue
1866+ continue ;
1867+ }
1868+ auto t1 = a1.template reducedmuon_as <TTracks>();
1869+ auto t2 = a2.template reducedmuon_as <TTracks>();
1870+
1871+ float dileptonMass = VarManager::fgValues[VarManager::kMass ];
1872+ if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && dileptonMass < useMiniTree.fConfigMiniTreeMaxMass ) {
1873+ dileptonMiniTreeRec (mcDecision,
1874+ VarManager::fgValues[VarManager::kMass ],
1875+ VarManager::fgValues[VarManager::kPt ], VarManager::fgValues[VarManager::kEta ], VarManager::fgValues[VarManager::kPhi ], VarManager::fgValues[VarManager::kCentFT0C ],
1876+ t1.reducedMCTrack ().pt (), t1.reducedMCTrack ().eta (), t1.reducedMCTrack ().phi (),
1877+ t2.reducedMCTrack ().pt (), t2.reducedMCTrack ().eta (), t2.reducedMCTrack ().phi (),
1878+ VarManager::fgValues[VarManager::kPt1 ], VarManager::fgValues[VarManager::kEta1 ], VarManager::fgValues[VarManager::kPhi1 ],
1879+ VarManager::fgValues[VarManager::kPt2 ], VarManager::fgValues[VarManager::kEta2 ], VarManager::fgValues[VarManager::kPhi2 ]);
1880+ }
1881+ }
1882+ }
18501883 if (fConfigQA ) {
18511884 if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { // correct track-collision association
18521885 fHistMan ->FillHistClass (histNamesMC[icut * fRecMCSignals .size () + isig][3 ].Data (), VarManager::fgValues);
@@ -1941,6 +1974,8 @@ struct AnalysisSameEventPairing {
19411974 // loop over mc stack and fill histograms for pure MC truth signals
19421975 // group all the MC tracks which belong to the MC event corresponding to the current reconstructed event
19431976 // auto groupedMCTracks = tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, event.reducedMCevent().globalIndex());
1977+ uint32_t mcDecision = 0 ;
1978+ int isig = 0 ;
19441979 for (auto & mctrack : mcTracks) {
19451980 VarManager::FillTrackMC (mcTracks, mctrack);
19461981 // NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete.
@@ -1958,9 +1993,15 @@ struct AnalysisSameEventPairing {
19581993 checked = sig->CheckSignal (true , mctrack);
19591994 // }
19601995 if (checked) {
1996+ mcDecision |= (static_cast <uint32_t >(1 ) << isig);
19611997 fHistMan ->FillHistClass (Form (" MCTruthGen_%s" , sig->GetName ()), VarManager::fgValues);
1998+ if (useMiniTree.fConfigMiniTree ) {
1999+ auto mcEvent = mcEvents.rawIteratorAt (mctrack.reducedMCeventId ());
2000+ dileptonMiniTreeGen (mcDecision, mcEvent.impactParameter (), mctrack.pt (), mctrack.eta (), mctrack.phi (), -999 , -999 , -999 );
2001+ }
19622002 }
19632003 }
2004+ isig++;
19642005 }
19652006
19662007 if (fHasTwoProngGenMCsignals ) {
@@ -1975,9 +2016,15 @@ struct AnalysisSameEventPairing {
19752016 continue ;
19762017 }
19772018 if (sig->CheckSignal (true , t1_raw, t2_raw)) {
2019+ mcDecision |= (static_cast <uint32_t >(1 ) << isig);
19782020 VarManager::FillPairMC<VarManager::kDecayToEE >(t1, t2);
19792021 fHistMan ->FillHistClass (Form (" MCTruthGenPair_%s" , sig->GetName ()), VarManager::fgValues);
2022+ if (useMiniTree.fConfigMiniTree ) {
2023+ // WARNING! To be checked
2024+ dileptonMiniTreeGen (mcDecision, event.impactParameter (), t1.pt (), t1.eta (), t1.phi (), t2.pt (), t2.eta (), t2.phi ());
2025+ }
19802026 }
2027+ isig++;
19812028 } // end loop over MC signals
19822029 } // end loop over pairs
19832030 } // end loop over events
0 commit comments