diff --git a/PWGUD/Tasks/upcTauCentralBarrelRL.cxx b/PWGUD/Tasks/upcTauCentralBarrelRL.cxx index bbcfbb4e63c..9551270f3fa 100644 --- a/PWGUD/Tasks/upcTauCentralBarrelRL.cxx +++ b/PWGUD/Tasks/upcTauCentralBarrelRL.cxx @@ -78,6 +78,10 @@ struct UpcTauRl { Configurable cutTrueGapSideFT0C{"cutTrueGapSideFT0C", 50., "FT0C threshold for SG selector"}; Configurable cutTrueGapSideZDC{"cutTrueGapSideZDC", 0., "ZDC threshold for SG selector. 0 is <1n, 4.2 is <2n, 6.7 is <3n, 9.5 is <4n, 12.5 is <5n"}; Configurable cutFITtime{"cutFITtime", 40., "Maximum FIT time allowed. Default is 40ns"}; + Configurable cutEvOccupancy{"cutEvOccupancy", 100000., "Maximum allowed occupancy"}; + Configurable cutEvTrs{"cutEvTrs", true, {"Event selection bit kNoCollInTimeRangeStandard"}}; + Configurable cutEvTrofs{"cutEvTrofs", true, {"Event selection bit kNoCollInRofStandard"}}; + Configurable cutEvHmpr{"cutEvHmpr", true, {"Event selection bit kNoHighMultCollInPrevRof"}}; Configurable applyAcceptanceSelection{"applyAcceptanceSelection", false, {"Select events in ALICE CB acceptance set with cutTrackEta"}}; Configurable cutTrackEta{"cutTrackEta", 0.9, "Cut on central barrel track eta in absolute values."}; } cutSample; @@ -108,8 +112,9 @@ struct UpcTauRl { Configurable useThresholdsPID{"useThresholdsPID", false, {"Switch off smaller-sigma-wins pidZ."}}; Configurable applyTauEventSelection{"applyTauEventSelection", true, {"Select tau event."}}; Configurable cutOppositeCharge{"cutOppositeCharge", true, {"Tracks have opposite charge."}}; + Configurable cutSameCharge{"cutSameCharge", false, {"Tracks have same charge."}}; Configurable cutMaxAcoplanarity{"cutMaxAcoplanarity", 4 * o2::constants::math::PI / 5, {"Opening angle of the tracks. What is more goes away."}}; - Configurable cutMinAcoplanarity{"cutMinAcoplanarity", 2 * o2::constants::math::PI / 5, {"Opening angle of the tracks. What is less goes away."}}; + Configurable cutMinAcoplanarity{"cutMinAcoplanarity", 0 * o2::constants::math::PI / 5, {"Opening angle of the tracks. What is less goes away."}}; Configurable cutElectronHasTOF{"cutElectronHasTOF", true, {"Electron is required to hit TOF."}}; Configurable cutGoodElectron{"cutGoodElectron", true, {"Select good electron."}}; Configurable cutOutRho{"cutOutRho", false, {"Cut out rho mass under two tracks are pions hypothesis"}}; @@ -181,11 +186,11 @@ struct UpcTauRl { } confAxis; using FullUDTracks = soa::Join; - using FullUDCollision = soa::Join::iterator; - using FullSGUDCollision = soa::Join::iterator; + using FullUDCollision = soa::Join::iterator; + using FullSGUDCollision = soa::Join::iterator; using FullMCUDTracks = soa::Join; - using FullMCUDCollision = soa::Join::iterator; - using FullMCSGUDCollision = soa::Join::iterator; + using FullMCUDCollision = soa::Join::iterator; + using FullMCSGUDCollision = soa::Join::iterator; // init void init(InitContext&) @@ -938,6 +943,29 @@ struct UpcTauRl { return true; } + template + bool isGoodROFtime(C const& coll) + { + + // Occupancy + if (coll.occupancyInTime() > cutSample.cutEvOccupancy) + return false; + + // kNoCollInTimeRangeStandard + if (cutSample.cutEvTrs && !coll.trs()) + return false; + + // kNoCollInRofStandard + if (cutSample.cutEvTrofs && !coll.trofs()) + return false; + + // kNoHighMultCollInPrevRof + if (cutSample.cutEvHmpr && !coll.hmpr()) + return false; + + return true; + } + template bool isElectronCandidate(T const& electronCandidate) // Loose criterium to find electron-like particle @@ -1030,6 +1058,8 @@ struct UpcTauRl { int enumTrk1 = (cutTauEvent.useThresholdsPID ? (isElectronCandidate(trkDaug1) ? P_ELECTRON : P_PION) : enumMyParticle(trackPDG(trkDaug1, cutPID.cutSiTPC, cutPID.cutSiTOF, cutPID.usePIDwTOF, cutPID.useScutTOFinTPC))); if (cutTauEvent.cutOppositeCharge && (trkDaug1.sign() * trkDaug2.sign() > 0)) return false; + if (cutTauEvent.cutSameCharge && (trkDaug1.sign() * trkDaug2.sign() < 0)) + return false; if (calculateAcoplanarity(daug[0].Phi(), daug[1].Phi()) > cutTauEvent.cutMaxAcoplanarity) return false; if (calculateAcoplanarity(daug[0].Phi(), daug[1].Phi()) < cutTauEvent.cutMinAcoplanarity) @@ -2487,6 +2517,9 @@ struct UpcTauRl { FullUDTracks const& reconstructedBarrelTracks) { + if (!isGoodROFtime(reconstructedCollision)) + return; + if (!isGoodFITtime(reconstructedCollision, cutSample.cutFITtime)) return; @@ -2510,6 +2543,9 @@ struct UpcTauRl { if (cutSample.useTrueGap) gapSide = trueGapSide; + if (!isGoodROFtime(reconstructedCollision)) + return; + if (gapSide != cutSample.whichGapSide) return; @@ -2531,6 +2567,9 @@ struct UpcTauRl { { isMC = true; + if (!isGoodROFtime(reconstructedCollision)) + return; + if (!isGoodFITtime(reconstructedCollision, cutSample.cutFITtime)) return; @@ -2567,6 +2606,9 @@ struct UpcTauRl { if (gapSide != cutSample.whichGapSide) return; + if (!isGoodROFtime(reconstructedCollision)) + return; + if (!isGoodFITtime(reconstructedCollision, cutSample.cutFITtime)) return; @@ -2612,30 +2654,11 @@ struct UpcTauRl { } // end processMCgenDG - void processTestMC(FullMCUDCollision const& /*reconstructedCollision*/, - FullMCUDTracks const& /*reconstructedBarrelTracks*/, - aod::UDMcCollisions const&, - aod::UDMcParticles const&) - { - // if (reconstructedCollision.has_udMcCollision()) { - // const auto& generatedCollision = reconstructedCollision.udMcCollision(); - // printDebugMessage(Form("%lli udMcCollision found", generatedCollision.size())); // FIXME: Type of size() is not invariant. - // } - - // const auto& track = reconstructedBarrelTracks.iteratorAt(0); - // if (track.size() && track.has_udMcParticle()) { - // const auto& particle = track.udMcParticle(); - // printDebugMessage(Form("%lli udMcParticle found", particle.size())); // FIXME: Type of size() is not invariant. - // } - - } // end processTestMC - PROCESS_SWITCH(UpcTauRl, processDataDG, "Iterate UD tables with measured data created by DG-Candidate-Producer.", false); PROCESS_SWITCH(UpcTauRl, processDataSG, "Iterate UD tables with measured data created by SG-Candidate-Producer.", false); PROCESS_SWITCH(UpcTauRl, processMCrecDG, "Iterate Monte Carlo UD tables with reconstructed data created by DG-Candidate-Producer. Similar to processDataDG but uses association to truth level.", false); PROCESS_SWITCH(UpcTauRl, processMCrecSG, "Iterate Monte Carlo UD tables with reconstructed data created by SG-Candidate-Producer. Similar to processDataSG but uses association to truth level and trueGap is not available.", false); PROCESS_SWITCH(UpcTauRl, processMCgen, "Iterate Monte Carlo UD tables with truth data.", false); - PROCESS_SWITCH(UpcTauRl, processTestMC, "Simple test of indices in MC sample.", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)