Skip to content

Commit d11b5d8

Browse files
committed
[PWGEM/Dilepton] add chi2 cut in testPV.cxx
1 parent d69f457 commit d11b5d8

2 files changed

Lines changed: 50 additions & 14 deletions

File tree

PWGEM/Dilepton/Tasks/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ o2physics_add_dpl_workflow(study-dcafitter
172172

173173
o2physics_add_dpl_workflow(test-pv
174174
SOURCES testPV.cxx
175-
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
175+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::EventFilteringUtils
176176
COMPONENT_NAME Analysis)
177177

178178
o2physics_add_dpl_workflow(evaluate-acceptance

PWGEM/Dilepton/Tasks/testPV.cxx

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
/// \author daiki.sekihata@cern.ch
1515

1616
#include "Common/CCDB/EventSelectionParams.h"
17+
#include "Common/Core/Zorro.h"
1718
#include "Common/DataModel/EventSelection.h"
1819

20+
#include <CCDB/BasicCCDBManager.h>
1921
#include <Framework/AnalysisDataModel.h>
2022
#include <Framework/AnalysisTask.h>
2123
#include <Framework/Configurable.h>
@@ -36,11 +38,12 @@ using namespace o2::framework::expressions;
3638
struct testPV {
3739

3840
// Configurables
39-
// Configurable<std::string> ccdburl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
41+
Configurable<std::string> ccdburl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
4042

4143
struct : ConfigurableGroup {
4244
std::string prefix = "eventCut";
4345
Configurable<int> cfgEventGeneratorId{"cfgEventGeneratorId", -1, "event generator index. e.g. select gap/signal events"};
46+
Configurable<float> cfgChi2PerNcontribMax{"cfgChi2PerNcontribMax", 1e+10, "max. chi2/Ncontrib of PV"};
4447
Configurable<float> cfgZvtxMin{"cfgZvtxMin", -10.f, "min. Zvtx"};
4548
Configurable<float> cfgZvtxMax{"cfgZvtxMax", 10.f, "max. Zvtx"};
4649
Configurable<bool> cfgRequireFT0AND{"cfgRequireFT0AND", true, "require FT0AND"};
@@ -50,37 +53,53 @@ struct testPV {
5053
Configurable<bool> cfgRequireGoodZvtxFT0vsPV{"cfgRequireGoodZvtxFT0vsPV", false, "require good Zvtx between FT0 vs. PV in event cut"};
5154
Configurable<bool> cfgRequireVertexITSTPC{"cfgRequireVertexITSTPC", false, "require Vertex ITSTPC in event cut"}; // ITS-TPC matched track contributes PV.
5255
Configurable<bool> cfgRequireVertexTOFmatched{"cfgRequireVertexTOFmatched", false, "require Vertex TOFmatched in event cut"}; // ITS-TPC-TOF matched track contributes PV.
56+
5357
// for RCT
5458
o2::framework::Configurable<bool> cfgRequireGoodRCT{"cfgRequireGoodRCT", true, "require good detector flag in run condtion table"};
5559
o2::framework::Configurable<std::string> cfgRCTLabel{"cfgRCTLabel", "CBT", "select 1 [CBT, CBT_hadronPID, CBT_muon_glo] see O2Physics/Common/CCDB/RCTSelectionFlags.h"};
5660
o2::framework::Configurable<bool> cfgCheckZDC{"cfgCheckZDC", false, "set ZDC flag for AA"};
5761
o2::framework::Configurable<bool> cfgTreatLimitedAcceptanceAsBad{"cfgTreatLimitedAcceptanceAsBad", false, "reject all events where the detectors relevant for the specified Runlist are flagged as LimitedAcceptance"};
5862
} eventCut;
5963

64+
// for zorro
65+
struct : ConfigurableGroup {
66+
std::string prefix = "zorroGroup";
67+
Configurable<std::string> cfgTriggerName{"cfgTriggerName", "fGlobalDimuon", "desired software trigger name"};
68+
Configurable<std::string> ccdbPathSoftwareTrigger{"ccdbPathSoftwareTrigger", "EventFiltering/Zorro/", "ccdb path for ZORRO objects"};
69+
Configurable<uint64_t> bcMarginForSoftwareTrigger{"bcMarginForSoftwareTrigger", 100, "Number of BCs of margin for software triggers"};
70+
} zorroGroup;
71+
6072
HistogramRegistry fRegistry{"fRegistry"};
73+
Zorro zorro;
6174

6275
void init(o2::framework::InitContext&)
6376
{
64-
// ccdb->setURL(ccdburl);
65-
// ccdb->setCaching(true);
66-
// ccdb->setLocalObjectValidityChecking();
67-
// ccdb->setFatalWhenNull(false);
77+
ccdb->setURL(ccdburl);
78+
ccdb->setCaching(true);
79+
ccdb->setLocalObjectValidityChecking();
80+
ccdb->setFatalWhenNull(false);
6881

6982
mRunNumber = 0;
7083

7184
addHistograms();
7285
}
7386

7487
int mRunNumber{0};
75-
// Service<o2::ccdb::BasicCCDBManager> ccdb;
88+
Service<o2::ccdb::BasicCCDBManager> ccdb;
7689

77-
template <typename TBC>
90+
template <bool isTriggerAnalysis, typename TBC>
7891
void initCCDB(TBC const& bc)
7992
{
8093
if (mRunNumber == bc.runNumber()) {
8194
return;
8295
}
8396

97+
if constexpr (isTriggerAnalysis) {
98+
zorro.setCCDBpath(zorroGroup.ccdbPathSoftwareTrigger);
99+
zorro.setBCtolerance(zorroGroup.bcMarginForSoftwareTrigger); // this does nothing.
100+
zorro.initCCDB(ccdb.service, bc.runNumber(), bc.timestamp(), zorroGroup.cfgTriggerName.value);
101+
}
102+
84103
mRunNumber = bc.runNumber();
85104
}
86105

@@ -136,6 +155,9 @@ struct testPV {
136155
if (eventCut.cfgRequireVertexTOFmatched && !collision.selection_bit(o2::aod::evsel::kIsVertexTOFmatched)) {
137156
return false;
138157
}
158+
if (collision.chi2() / collision.numContrib() > eventCut.cfgChi2PerNcontribMax) {
159+
return false;
160+
}
139161
return true;
140162
}
141163

@@ -155,12 +177,12 @@ struct testPV {
155177
fRegistry.fill(HIST("Vertex/hCollisionTimeRes"), collision.numContrib(), collision.collisionTimeRes());
156178
}
157179

158-
template <bool isMC, typename TBCs, typename TCollisions, typename TMCCollisions, typename TMCParticles>
180+
template <bool isMC, bool isTriggerAnalysis, typename TBCs, typename TCollisions, typename TMCCollisions, typename TMCParticles>
159181
void run(TBCs const&, TCollisions const& collisions, TMCCollisions const&, TMCParticles const&)
160182
{
161183
for (const auto& collision : collisions) {
162184
auto bc = collision.template bc_as<TBCs>();
163-
initCCDB(bc);
185+
initCCDB<isTriggerAnalysis>(bc);
164186

165187
if constexpr (isMC) {
166188
if (!collision.has_mcCollision()) {
@@ -172,6 +194,12 @@ struct testPV {
172194
}
173195
}
174196

197+
if constexpr (isTriggerAnalysis) {
198+
if (!zorro.isSelected(bc.globalBC(), zorroGroup.bcMarginForSoftwareTrigger)) { // triggered event
199+
continue;
200+
}
201+
}
202+
175203
fRegistry.fill(HIST("hCollisionCounter"), 1);
176204

177205
if (!isSelectedCollision(collision)) {
@@ -190,21 +218,29 @@ struct testPV {
190218
} // end of collision loop
191219
}
192220

193-
using MyCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>;
221+
using MyCollisions = soa::Join<aod::Collisions, aod::EvSels>;
222+
using MyCollisionsMC = soa::Join<MyCollisions, aod::McCollisionLabels>;
194223
using MyBCs = soa::Join<aod::BCsWithTimestamps, aod::BcSels>;
195224

196225
Filter collisionFilter_evsel = eventCut.cfgZvtxMin < o2::aod::collision::posZ && o2::aod::collision::posZ < eventCut.cfgZvtxMax;
197226
using FilteredMyCollisions = soa::Filtered<MyCollisions>;
227+
using FilteredMyCollisionsMC = soa::Filtered<MyCollisionsMC>;
198228

199229
void processData(FilteredMyCollisions const& collisions, MyBCs const& bcs)
200230
{
201-
run<false>(bcs, collisions, nullptr, nullptr);
231+
run<false, false>(bcs, collisions, nullptr, nullptr);
202232
}
203233
PROCESS_SWITCH(testPV, processData, "processData", true);
204234

205-
void processMC(FilteredMyCollisions const& collisions, MyBCs const& bcs, aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles)
235+
void processTriggeredData(FilteredMyCollisions const& collisions, MyBCs const& bcs)
236+
{
237+
run<false, true>(bcs, collisions, nullptr, nullptr);
238+
}
239+
PROCESS_SWITCH(testPV, processTriggeredData, "processTriggeredData", true);
240+
241+
void processMC(FilteredMyCollisionsMC const& collisions, MyBCs const& bcs, aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles)
206242
{
207-
run<true>(bcs, collisions, mcCollisions, mcParticles);
243+
run<true, false>(bcs, collisions, mcCollisions, mcParticles);
208244
}
209245
PROCESS_SWITCH(testPV, processMC, "processMC", false);
210246

0 commit comments

Comments
 (0)