diff --git a/PWGEM/Dilepton/Tasks/CMakeLists.txt b/PWGEM/Dilepton/Tasks/CMakeLists.txt index 8c00bc2ad8e..0bcd1085217 100644 --- a/PWGEM/Dilepton/Tasks/CMakeLists.txt +++ b/PWGEM/Dilepton/Tasks/CMakeLists.txt @@ -172,7 +172,7 @@ o2physics_add_dpl_workflow(study-dcafitter o2physics_add_dpl_workflow(test-pv SOURCES testPV.cxx - PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore + PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::EventFilteringUtils COMPONENT_NAME Analysis) o2physics_add_dpl_workflow(evaluate-acceptance diff --git a/PWGEM/Dilepton/Tasks/testPV.cxx b/PWGEM/Dilepton/Tasks/testPV.cxx index 0656281e236..5684d2cc0f7 100644 --- a/PWGEM/Dilepton/Tasks/testPV.cxx +++ b/PWGEM/Dilepton/Tasks/testPV.cxx @@ -14,8 +14,10 @@ /// \author daiki.sekihata@cern.ch #include "Common/CCDB/EventSelectionParams.h" +#include "Common/Core/Zorro.h" #include "Common/DataModel/EventSelection.h" +#include #include #include #include @@ -36,11 +38,12 @@ using namespace o2::framework::expressions; struct testPV { // Configurables - // Configurable ccdburl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable ccdburl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; struct : ConfigurableGroup { std::string prefix = "eventCut"; Configurable cfgEventGeneratorId{"cfgEventGeneratorId", -1, "event generator index. e.g. select gap/signal events"}; + Configurable cfgChi2PerNcontribMax{"cfgChi2PerNcontribMax", 1e+10, "max. chi2/Ncontrib of PV"}; Configurable cfgZvtxMin{"cfgZvtxMin", -10.f, "min. Zvtx"}; Configurable cfgZvtxMax{"cfgZvtxMax", 10.f, "max. Zvtx"}; Configurable cfgRequireFT0AND{"cfgRequireFT0AND", true, "require FT0AND"}; @@ -50,6 +53,7 @@ struct testPV { Configurable cfgRequireGoodZvtxFT0vsPV{"cfgRequireGoodZvtxFT0vsPV", false, "require good Zvtx between FT0 vs. PV in event cut"}; Configurable cfgRequireVertexITSTPC{"cfgRequireVertexITSTPC", false, "require Vertex ITSTPC in event cut"}; // ITS-TPC matched track contributes PV. Configurable cfgRequireVertexTOFmatched{"cfgRequireVertexTOFmatched", false, "require Vertex TOFmatched in event cut"}; // ITS-TPC-TOF matched track contributes PV. + // for RCT o2::framework::Configurable cfgRequireGoodRCT{"cfgRequireGoodRCT", true, "require good detector flag in run condtion table"}; o2::framework::Configurable cfgRCTLabel{"cfgRCTLabel", "CBT", "select 1 [CBT, CBT_hadronPID, CBT_muon_glo] see O2Physics/Common/CCDB/RCTSelectionFlags.h"}; @@ -57,14 +61,23 @@ struct testPV { o2::framework::Configurable cfgTreatLimitedAcceptanceAsBad{"cfgTreatLimitedAcceptanceAsBad", false, "reject all events where the detectors relevant for the specified Runlist are flagged as LimitedAcceptance"}; } eventCut; + // for zorro + struct : ConfigurableGroup { + std::string prefix = "zorroGroup"; + Configurable cfgTriggerName{"cfgTriggerName", "fGlobalDimuon", "desired software trigger name"}; + Configurable ccdbPathSoftwareTrigger{"ccdbPathSoftwareTrigger", "EventFiltering/Zorro/", "ccdb path for ZORRO objects"}; + Configurable bcMarginForSoftwareTrigger{"bcMarginForSoftwareTrigger", 100, "Number of BCs of margin for software triggers"}; + } zorroGroup; + HistogramRegistry fRegistry{"fRegistry"}; + Zorro zorro; void init(o2::framework::InitContext&) { - // ccdb->setURL(ccdburl); - // ccdb->setCaching(true); - // ccdb->setLocalObjectValidityChecking(); - // ccdb->setFatalWhenNull(false); + ccdb->setURL(ccdburl); + ccdb->setCaching(true); + ccdb->setLocalObjectValidityChecking(); + ccdb->setFatalWhenNull(false); mRunNumber = 0; @@ -72,15 +85,21 @@ struct testPV { } int mRunNumber{0}; - // Service ccdb; + Service ccdb; - template + template void initCCDB(TBC const& bc) { if (mRunNumber == bc.runNumber()) { return; } + if constexpr (isTriggerAnalysis) { + zorro.setCCDBpath(zorroGroup.ccdbPathSoftwareTrigger); + zorro.setBCtolerance(zorroGroup.bcMarginForSoftwareTrigger); // this does nothing. + zorro.initCCDB(ccdb.service, bc.runNumber(), bc.timestamp(), zorroGroup.cfgTriggerName.value); + } + mRunNumber = bc.runNumber(); } @@ -136,6 +155,9 @@ struct testPV { if (eventCut.cfgRequireVertexTOFmatched && !collision.selection_bit(o2::aod::evsel::kIsVertexTOFmatched)) { return false; } + if (collision.chi2() / collision.numContrib() > eventCut.cfgChi2PerNcontribMax) { + return false; + } return true; } @@ -155,12 +177,12 @@ struct testPV { fRegistry.fill(HIST("Vertex/hCollisionTimeRes"), collision.numContrib(), collision.collisionTimeRes()); } - template + template void run(TBCs const&, TCollisions const& collisions, TMCCollisions const&, TMCParticles const&) { for (const auto& collision : collisions) { auto bc = collision.template bc_as(); - initCCDB(bc); + initCCDB(bc); if constexpr (isMC) { if (!collision.has_mcCollision()) { @@ -172,6 +194,12 @@ struct testPV { } } + if constexpr (isTriggerAnalysis) { + if (!zorro.isSelected(bc.globalBC(), zorroGroup.bcMarginForSoftwareTrigger)) { // triggered event + continue; + } + } + fRegistry.fill(HIST("hCollisionCounter"), 1); if (!isSelectedCollision(collision)) { @@ -190,21 +218,29 @@ struct testPV { } // end of collision loop } - using MyCollisions = soa::Join; + using MyCollisions = soa::Join; + using MyCollisionsMC = soa::Join; using MyBCs = soa::Join; Filter collisionFilter_evsel = eventCut.cfgZvtxMin < o2::aod::collision::posZ && o2::aod::collision::posZ < eventCut.cfgZvtxMax; using FilteredMyCollisions = soa::Filtered; + using FilteredMyCollisionsMC = soa::Filtered; void processData(FilteredMyCollisions const& collisions, MyBCs const& bcs) { - run(bcs, collisions, nullptr, nullptr); + run(bcs, collisions, nullptr, nullptr); } PROCESS_SWITCH(testPV, processData, "processData", true); - void processMC(FilteredMyCollisions const& collisions, MyBCs const& bcs, aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles) + void processTriggeredData(FilteredMyCollisions const& collisions, MyBCs const& bcs) + { + run(bcs, collisions, nullptr, nullptr); + } + PROCESS_SWITCH(testPV, processTriggeredData, "processTriggeredData", true); + + void processMC(FilteredMyCollisionsMC const& collisions, MyBCs const& bcs, aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles) { - run(bcs, collisions, mcCollisions, mcParticles); + run(bcs, collisions, mcCollisions, mcParticles); } PROCESS_SWITCH(testPV, processMC, "processMC", false);